Konfigurasi Nginx Sebagai Reverse Proxy Untuk Apache

Panduan cara konfigurasi Nginx sebagai reverse proxy untuk Apache pada Linux, tested!. Pada tutorial ini memakai Linux Ubuntu 18.04, tetapi sanggup diterapkan pada distro Linux lainnya, misal Debian dan CentOS. Karena ada dasarnya konfigurasinya sama, hanya berbeda pada letak direktori konfigurasi virtual host dan dokumen webroot saja.


Sebagai contoh, kalau tradisi Nginx pada Ubuntu virtual hostnya pada /etc/nginx/sites-available dan /etc/sites-enabled, maka di CentOS berada di /etc/nginx/conf.d. Kaprikornus gampang saja, tinggal disesuaikan.


Install Apache, MariaDB dan PHP


Pada langkah awal kita akan menginstall Apache, MariaDB, dan PHP serta modul-modulnya, salah satunya adalah mod_rpaf


apt install -y apache2 mariadb-server php libapache2-mod-php libapache2-mod-rpaf php-fpm php-mysql php-cli php-gd php-ldap php-odbc php-pdo php-pear php-mbstring php-xml php-xmlrpc php-snmp php-soap

Tingkatkan sekuriti MariaDB dengan cara setup akun root untuk MySQL dan menghapus database yang tidak perlu


mysql_secure_installation

Langkah selanjutnya, mengubah port Apache ke 8080 (HTTP) dan 8443 (HTTPS) yang akan dipakai sebagai backend dari Nginx. Kaprikornus Nginx yang akan menghandle trafik HTTP dan HTTPS pada port standar 80 dan 443.


nano /etc/apache2/ports.conf

Sesuaikan portnya menyerupai berikut port 8080 untuk HTTP dan 8443 akan dipakai untuk koneksi HTTPS


Listen 8080

<IfModule ssl_module>
Listen 8443
</IfModule>

<IfModule mod_gnutls.c>
Listen 8443
</IfModule>

Hapus pola konfigurasi virtual host bawaan Apache


rm -f /etc/apache2/sites-available/*.conf

Hapus juga link simbolisnya


unlink /etc/apache2/sites-enabled/*

Buat konfigurasi virtual host baru, perhatikan portnya 8080


nano /etc/apache2/sites-available/idnetter.com.conf

Isi dengan template berikut


<VirtualHost *:8080>

ServerName idnetter.com
ServerAlias www.idnetter.com
ServerAdmin man@idnetter.com
DocumentRoot /var/www/html

<Directory "/var/www/html">
Options FollowSymLinks
AllowOverride All
</Directory>

LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Ini pola konfigurasi SSL, kalau kelak mau pakai HTTPS (sekarang tidak, alasannya yakni SSLnya belum disetup)


<VirtualHost GANTI-IP-SERVER:8443>

ServerName idnetter.com
ServerAlias www.idnetter.com
ServerAdmin man@idnetter.com
DocumentRoot /var/www/html

CustomLog /var/log/apache2/idnetter.com.bytes bytes
CustomLog /var/log/apache2/idnetter.com.log combined
ErrorLog /var/log/apache2/idnetter.com.error.log

<Directory /var/www/html>
AllowOverride All
SSLRequireSSL
Options +Includes -Indexes +ExecCGI
</Directory>

SSLEngine on
SSLVerifyClient none
SSLCertificateFile /etc/letsencrypt/live/idnetter.com/certificate.crt
SSLCertificateKeyFile /etc/letsencrypt/live/idnetter.com/certificate.key
SSLCertificateChainFile /etc/letsencrypt/live/idnetter.com/certificate.ca

</VirtualHost>

Simpan lalu aktifkan virtual host yang gres dengan perintah a2ensite (singkatan untuk: apache2 enable site)


a2ensite idnetter.com

Satu lagi, tambahkan IP server ke dalam konfigurasi modul Apache rpaf, semoga kita sanggup mengetahui real IP klien yang mengakses server.


nano /etc/apache2/mods-available/rpaf.conf

Pada baris berikut, tambahkan IP server (ganti, 1.2.3.4)


RPAFproxy_ips 127.0.0.1 1.2.3.4 ::1

Jika Anda ingin mengaktifkan modul mod_rewrite Apache, yang biasanya untuk mempercantik URL supaya permalinknya lebih search engine friendly (SEF), sanksi perintah a2enmod kepanjangannya apache2 enable module.


a2enmod rewrite

Ok, hingga disini Apache sudah kita setup sebagai web server yang bekerja di “balik layar”. Kemudian restart service Apache semoga konfigurasi yang gres saja kita edit sanggup diterapkan sekarang.


systemctl restart apache2

Izinkan layanan Apache dan MariaDB otomatis berjalan dikala sistem di-restart.


systemctl enable apache2
systemctl enable mariadb

Buat file info.php di dalam folder webroot /var/www/html untuk melaksanakan uji coba


echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Sekarang coba, buka browser untuk memastikan Apache kini sudah berjalan pada port 8080, terusan http://ip-server:8080/info.php.


Uji coba ini bertujuan, kalau server tidak sanggup diakses, kita sanggup dengan gampang mencari kesalahan pada konfigurasi Apache sebelum melanjutkan ke langkah selanjutnya.


Install Nginx


Install Nginx menyerupai biasanya


apt install -y nginx

Konfigurasi Nginx sebagai reverse proxy


Ubah konfigurasi global Nginx, kita akan mengaktifkan module gzip dan menambahkan beberapa baris untuk pengaturan proxy cache kalau dibutuhkan.


cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf_bak && nano /etc/nginx/nginx.conf

Paste arahan berikut


user www-data;
worker_processes auto;
worker_rlimit_nofile 65535;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
worker_connections 1024;
use epoll;
multi_accept on;
}

http {
# Basic Settings
sendfile on;
tcp_nopush on;
tcp_nodelay on;
client_header_timeout 60s;
client_body_timeout 60s;
client_header_buffer_size 2k;
client_body_buffer_size 256k;
client_max_body_size 256m;
large_client_header_buffers 4 8k;
send_timeout 60s;
keepalive_timeout 30s;
reset_timedout_connection on;
server_tokens off;
server_name_in_redirect off;
server_names_hash_max_size 512;
server_names_hash_bucket_size 512;

# Mime type
include /etc/nginx/mime.types;
default_type application/octet-stream;

# Logging Settings
log_format main '$remote_addr - $remote_user [$time_local] $request'
'"$status" $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$http_x_forwarded_for"';
log_format bytes '$body_bytes_sent';
error_log /var/log/nginx/error.log;
access_log off;
# access_log /var/log/nginx/access.log;

# Compression
gzip on;
gzip_static on;
gzip_vary on;
gzip_comp_level 6;
gzip_min_length 1024;
gzip_buffers 16 8k;
gzip_types text/plain text/css text/j4vascript text/js text/xml application/json application/j4vascript application/x-j4vascript application/xml application/xml+rss application/x-font-ttf image/svg+xml font/opentype;
gzip_proxied any;
gzip_disable "MSIE [1-6]\.";

# Proxy settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Set-Cookie;
proxy_buffers 32 4k;
proxy_connect_timeout 30s;
proxy_send_timeout 90s;
proxy_read_timeout 90s;

# Cache settings
proxy_cache_path /var/cache/nginx levels=2 keys_zone=cache:10m inactive=60m max_size=1024m;
proxy_cache_key "$host$request_uri $cookie_user";
proxy_temp_path /var/cache/nginx/temp;
proxy_ignore_headers Expires Cache-Control;
proxy_cache_use_stale error timeout invalid_header http_502;
proxy_cache_valid any 1d;

# Cache bypass
map $http_cookie $no_cache {
default 0;
SESS 1;
wordpress_logged_in 1;
}

# File cache settings
open_file_cache max=10000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors off;

# SSL PCI Compliance
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";

# Virtual Host Configs

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

Oke, kini kita punya konfigurasi Nginx yang sempurna, Gzip aktif, SSL chippers, proxy cache kalau hendak diaktifkan via vhost. Berikutnya menciptakan konfigurasi server block.


Baik Apache dan Ngix harus disetup virtual hostnya dengan path web root yang sama pula.


nano /etc/nginx/sites-available/idnetter.com.conf

isi dengan konfigurasi berikut


server {
listen 80;
server_name idnetter.com www.idnetter.com;
error_log /var/log/apache2/error.log error;

location / {
proxy_pass http://GANTI_IP_SERVER:8080;

proxy_cache cache;
proxy_cache_valid 15m;
proxy_cache_valid 404 1m;
proxy_no_cache $no_cache;
proxy_cache_bypass $no_cache;
proxy_cache_bypass $cookie_session $http_x_update;

location * ^.+\.(jpg|jpeg|gif|png|ico|svg|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|odt|ods|odp|odf|tar|wav|bmp|rtf|js|mp3|avi|mpeg|flv|html|htm)$ {
proxy_cache off;
root /var/www/html;
access_log /var/log/apache2/idnetter.com.log combined;
access_log /var/log/apache2/idnetter.com.bytes bytes;
expires max;
try_files $uri @fallback;
}
}

location @fallback {
proxy_pass http://GANTI_IP_SERVER:8080;
}

location /\.ht {return 404;}
location /\.svn/ {return 404;}
location /\.git/ {return 404;}
location /\.hg/ {return 404;}
location /\.bzr/ {return 404;}
}

Buat link simbolis idnetter.com.conf ke /etc/nginx/sites-enabled/


ln -s /etc/nginx/sites-available/idnetter.com.conf /etc/nginx/sites-enabled/

Ini saya sertakan contoh, konfigurasi SSL Nginx reverse proxy, selain port, perbedaannya hanya pada 3 baris yang semuanya diawali dengan ssl*


server {
listen GANTI-IP-SERVER:443;
server_name idnetter.com www.idnetter.com;
error_log /var/log/apache2/error.log error;

ssl on;
ssl_certificate /etc/letsencrypt/live/idnetter.com/certificate.pem;
ssl_certificate_key /etc/letsencrypt/live/idnetter.com/certificate.key;


location / {
proxy_pass http://GANTI_IP_SERVER:8433;

proxy_cache cache;
proxy_cache_valid 15m;
proxy_cache_valid 404 1m;
proxy_no_cache $no_cache;
proxy_cache_bypass $no_cache;
proxy_cache_bypass $cookie_session $http_x_update;

location * ^.+\.(jpg|jpeg|gif|png|ico|svg|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|odt|ods|odp|odf|tar|wav|bmp|rtf|js|mp3|avi|mpeg|flv|html|htm)$ {
proxy_cache off;
root /var/www/html;
access_log /var/log/apache2/idnetter.com.log combined;
access_log /var/log/apache2/idnetter.com.bytes bytes;
expires max;
try_files $uri @fallback;
}
}

location @fallback {
proxy_pass http://GANTI_IP_SERVER:8433;
}

location /\.ht {return 404;}
location /\.svn/ {return 404;}
location /\.git/ {return 404;}
location /\.hg/ {return 404;}
location /\.bzr/ {return 404;}
}

Oke selanjutnya kita uji coba coba terusan memakai curl


curl -I idnetter.com

hasilnya nanti ada gosip Server: nginx, menyerupai dibawah ini


Server: nginx/1.14.0 (Ubuntu)
Date: Tue, 28 Aug 2018 15:35:44 GMT
Content-Type: text/html
Content-Length: 194
Connection: keep-alive

Ok, selesai.


Tutorial lain untuk mengoptimalkan dan menyempurnakan web server Anda



Selamat mencoba kawan.



Sumber https://idnetter.com

Mari berteman dengan saya

Follow my Instagram _yudha58

Subscribe to receive free email updates:

0 Response to "Konfigurasi Nginx Sebagai Reverse Proxy Untuk Apache"

Posting Komentar