nginx reverse proxy ssl

Nginx Reverse Proxy dan Penerapan SSL

Posted on

Pada tulisan saya sebelumnya, saya pernah membahas apa itu reverse proxy pada nginx. Dan kali ini saya akan membuat dokumentasi (khususnya buat saya sendiri) dalam menerapkan reverse proxy dan meng-install SSL pada server backendnya. Jika masih ada yang belum tahu apa itu SSL (Secure Socket Layer) serta penerapannya, bisa membaca tulisan saya tentang Install SSL dengan Let’s Encrypt di NGINX dan Secure Portainer (SSL) dengan Let’s Encrpyt Certificate.

Dalam studi kasus kali ini, saya memiliki 2 unit web server yang berada dibelakang 1 unit server reverse proxy. Disini saya hanya memiliki 1 buah IP Public, dan inilah yang menjadi alasan saya menggunakan reverse proxy karena saya hanya memiliki 1 buah IP Public yang harus saya bagi dengan beberapa web server lainnya. 

Virtual MachineIP PublicIP PrivateKeterangan
Reverse Proxy168.138.11.67172.16.1.3NGINX sebagai reverse proxy dan SSL
Web Server 1172.16.1.4hosting web http://aditya.com
Web Server 2172.16.1.5hosting web http://perdana.com
Contoh Konfigurasi IP Address

Disini saya asumsikan untuk masing-masing web server sudah bisa nemampikan halaman web dengan baik pada masing IP address private melalui port 80 (http). Jadi, sisanya saya hanya akan melakukan konfigurasi pada reverse proxynya saja. Berikut ini adalah contoh server block untuk NGINX pada reverse proxy dimana masing-masing request yang menuju domain aditya.com dan perdana.com akan masuk melwati reverse proxy kemudian akan diteruskan kembali ke web server mereka masing-masing.

Web Server 1 (/etc/nginx/conf.d/aditya.id.conf)

server {
listen 80;
listen [::]:80;

server_name aditya.com;

location / {
proxy_pass http://172.16.1.4/;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
}
}

Web Server 2 (/etc/nginx/conf.d/perdana.id.conf)

server {
listen 80;
listen [::]:80;

server_name perdana.com;

location / {
proxy_pass http://172.16.1.5/;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
}
}

Disini saya akan memasang SSL (Secure Socket Layer) pada server reverse proxy untuk masing-masing domain. Dengan konfigurasi seperti ini jadi setiap traffic (pertukaran data) dari komputer client yang akan menuju ke domain aditya.com dan perdana.com yang masuk terlebih dulu ke server reverse proxy akan di enskripsi. Sedangkan traffic dari server reverse proxy ke web server 1 dan web server 2, kita tidak akan merapkan enskripsi karena (menurut saya) ini masih cukup aman karena pertukaran data antara server reverse proxy dan ke 2 web server terjadi didalam DMZ (Delimitary Zone) topologi saya.

Selanjutnya silahkan install SSL untuk masing-masing domain, disini saya sendiri menggunakan sertifikat dari Let’s Encrypt yang bisa digunakan secara gratis. Untuk proses installasinya bisa melihat dalam tulisan saya tentang Install SSL dengan Let’s Encrypt di NGINX.

Semoga bermanfaat.