Konfigurasi nginx sebagai reverse proxy
Pindah�ke direktory /etc/nginx/conf.d dan buat dua file, oprek.conf dan oprek-www.conf
cd /etc/nginx/conf.d/ touch oprek.conf oprek-www.conf
file oprek.conf akan kita gunakan sebagai konfigurasi reverse proxy untuk domain oprek.karedok.net sedangkan file oprek-www.conf untuk redirect request domain dengan www ke domain tanpa www.
edit file oprek.conf
nano oprek.conf
isi dengan konfigurasi berikut:
upstream oprek8080 { server 127.0.0.1:8080; } server { listen 80; listen [::]:80; server_name oprek.karedok.net; location / { proxy_pass http://oprek8080; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
Catatan:
- nama yang digunakan di line 1 harus sama dengan nama yang ditulis di proxy_pass
- isian di line 2 merupakan ip server Apache beserta port nya. Dalam tulisan ini karena satu server digunakan 127.0.0.1
- bagian server_name merupakan nama domain yang kita pasang reverse proxy.
selanjutnya konfigurasi�redirect akses domain dengan www ke non-www.
nano oprek-www.conf
isikan dengan
server { server_name www.oprek.karedok.net; return 301 $scheme://oprek.karedok.net$request_uri; }
cek konfigurasi kita dengan perintah
nginx -t
kalau hasilnya
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
artinya konfigurasi kita sudah benar. Karena kita merubah konfigurasi nginx dan apache, maka kita perlu merestart kedua service tersebut
systemctl restart nginx httpd
Jika tidak ada masalah, seharusnya sekarang kita sudah bisa akses domain oprek.karedok.net yang sudah melalui reverse proxy nginx. Untuk memastikan apakah benar request dari klien di handle oleh nginx, maka kita coba untuk mematikan service nginx.
systemctl stop nginx
coba buka kembali domain oprek.karedok.net .� Seharusnya sekarang halaman websitenya tidak akan muncul. Yang artinya konfigurasi reverse proxy kita sudah benar. Sekarang jalankan kembali service nginx.
systemctl start nginx
Check log Apache dan Update untuk merekam IP sumber request
Sekarang mari kita lihat file log akses milik apache.
tail -f /var/log/httpd/access_log
kita akan melihat catatan seperti berikut:
oprek.karedok.net 127.0.0.1 - - [09/Mar/2018:22:15:36 +0700] "GET / HTTP/1.1" 200 21 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0"
Jika kita perhatikan, IP yang dicatat oleh Apache adalah 127.0.0.1 dimana itu adalah�IP dimana service reverse proxy berada. Kita akan perbaiki ini agar Apache merekam IP klien, bukan IP server reverse proxy.
Buka kembali fle�/etc/httpd/conf/httpd.conf
nano /etc/httpd/conf/httpd.conf
Seperti yang sudah kita lakukan sebelumnya, cari bagian LogFormat dan kita akan menambahkan parameter %a menggantikan %h. Adapun sebelumnya seperti ini:
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
kita akan rubah menjadi:
LogFormat "%v %a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Parameter a% akan memerintahkan Apache untuk merekam�IP klien dan bukannya IP server reverse proxy. IP klien ini sebelumnya sudah di forward oleh nginx dalam data header request.
Agar Apache bisa menangkap parameter %a dan mencatat dalam log,�kita perlu merubah konfigurasi virtualhost oprek.karedok.net kita akan menambahkan dua baris berikut:
RemoteIPHeader X-Forwarded-For RemoteIPInternalProxy 127.0.0.1/8
Tempatkan dua baris tersebut diluar bagian <Directory> atau selengkapnya konfigurasi kita akan menjadi seperti ini:
<VirtualHost 127.0.0.1:80> ServerName oprek.karedok.net DocumentRoot /var/www/karedok RemoteIPHeader X-Forwarded-For RemoteIPInternalProxy 127.0.0.1/8 <Directory /var/www/karedok> Require all granted </Directory> </VirtualHost>
Restart kedua service, buka oprek.karedok.net melalui web browser dan�lihat�file log
systemctl restart nginx httpd tail -f /var/log/httpd/access_log
seharusnya sekarang yang dicatat oleh apache di file log adalah seperti ini:
oprek.karedok.net 112.215.238.45 - - [09/Mar/2018:22:18:21 +0700] "GET / HTTP/1.1" 200 21 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0"
Selamat… Sampai disini, setup yang kita lakukan sudah berhasil.
Konfigurasi yang dijabarkan di tulisan ini hanya dasar dari konfigurasi sebuah reverse proxy dengan service apache di belakangnya. Karenanya masih sangat bisa dikembangkan lagi misalnya konfigurasi mengatur cache, atau setup dengan server yang terpisah antara server apache dan nginx, atau satu server nginx dengan banyak server apache di belakangnya. Semua tergantung kebutuhan…
Btw, akhirnya saya punya catatn bagaimana melakukan konfigurasi reverse proxy… Hehehe… Semoga tulisan ini bisa membantu kawan-kawan semua…
Kalau ada yang keliru dari tulisan ini atau ada saran untuk kami, silakan gunakan kolom komentar dibawah untuk kita diskusi…
Teirma kasih sudah membaca sampai selesai, dan selamat mencoba… 😀
Google Docs: https://go.karedok.net/2FKjZjd
SlideShare:�https://www.slideshare.net/karedoknet/nginx-sebagai-reverse-proxy-apache-di-centos-7