Reverse Proxy, jika mendengar kata proxy yang muncul dibenak kita adalah sebuah server perantara antara client dengan web server yang sebenarnya. Pada umumnya terdapat 2 jenis proxy yaitu forward proxy dan reverse proxy. Forward proxy adalah server yang biasanya berfungsi sebagai caching halaman-halaman web yang pernah dikunjungi, pengalokasian bandwidh atau rule mengenai user, content filtering dan fungsi-fungsi lainnya. Sedangkan reverse proxy yang biasanya berada di belakang firewall bertugas meneruskan request client (misalkan browser web) ke server web yang tepat. Sebagai proxy, reverse proxy juga memiliki kemampuan content caching.
Salah satu reverse proxy terbaik yang ada saat ini adalah nginx. Nginx diklaim mampu menangani load traffic yang tinggi serta memiliki kecepatan yang lebih baik dari pada Apache. Metode reverse proxy ini juga banyak digunakan untuk melengkapi topologi aplikasi-aplikasi masa kini yang banyak menggunakan micro services dan load balancer.
Studi Kasus
Pada tulisan ini saya akan membuat dokumentasi khususnya untuk saya pribadi atas kebutuhan sistem yang akan saya bangun. Kondisinya saat ini saya hanya memiliki 1 buah IP Public yang dialokasikan untuk kantor sedangkan rencananya saya akan membangun 2 buah web server. Untuk memenuhi kebutuhan tesebut, kita akan mengkonfigurasi salah satu web server kita sebagai reverse proxy server untuk server lainnya.
Untuk lebih memudahkan, kita analogikan bahwa kita akan membuat 2 buah web server yaitu server 1 dengan IP Address 192.168.10.10 dan server 2 dengan IP Address 192.168.10.20. Pada prakteknya server 1 adalah sebuah web server biasa yang akan kita tambah fungsinya sebagai reverse proxy sedangkan server 2 adalah web server biasa. Untuk memudahkan kita melihat traffic ke masing-masing server tadi, kita akan membuat vhost untuk domain www.server1.com pada server 1 dan vhost untuk domain www.server2.com pada server 2.
Sebelumnya pada router, kita sudah melalakukan DNAT atas IP Public yang kita miliki untuk port 80 dan 443 ke IP Server 1, dan karena kita hanya memiliki 1 IP Public maka untuk traffic yang akan menuju IP Server 2 melalui port 80 dan 443 akan melewati server 1 terlebih dahulu kemudian diteruskan ke server 2.
1. Konfigurasi Reverse Proxy di Server 1
Untuk menginstal dan mengkonfigurasi Nginx sebagai reverse proxy, kita akan menginstall nginx nya terlebih dahulu.
$ sudo apt install update
$ sudo apt install nginx
kita akan membuat 2 buah vhost masing-masing untuk domain www.server1.com dan www.server2.com
$ sudo nano /etc/nginx/sites-enabled/www.server1.com
server {
root /home/www/server1.com;
index index.html index.htm index.php;
server_name server1.com www.server1.com;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
listen [::]:80;
listen 80;
}
$ sudo nano /etc/nginx/sites-enabled/www.server2.com
server {
server_name server2.com www.server2.com;
location / {
proxy_pass http://192.168.10.20;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
listen [::]:80;
listen 80;
}
Test konfigurasi nginx.
$ sudo nginx -t
Jika tidak ada error, selanjutnya aktifkan vhost.
$ sudo ln -s /etc/nginx/sites-enabled/www.server1.com /etc/nginx/sites-enabled/
$ sudo ln -s /etc/nginx/sites-enabled/www.server2.com /etc/nginx/sites-enabled/
Setelah itu restart nginx.
Untuk pengetesan, jangan lupa tambahkan file index di dalam vhost root directory www.server1.com untuk identifikasi ini adalah web server 1.
$ sudo systemctl restart nginx
Sampai disini reverse proxy juga sudah selesai.
2. Konfigurasi Web Server di Server 2
Sama seperti server 1 kita akan menginstall nginx di server 2 dengan perintah yang sama.
$ sudo apt install update
$ sudo apt install nginx
Selanjutnya buat 1 buah vhost untuk domain www.server2.com untuk server 2.
$ sudo nano /etc/nginx/sites-enabled/www.server1.com
server {
root /home/www/server2.com;
index index.html index.htm index.php;
server_name server2.com www.server2.com;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
listen [::]:80;
listen 80;
}
Test konfigurasi nginx.
$ sudo nginx -t
Jika tidak ada error, selanjutnya aktifkan vhost.
$ sudo ln -s /etc/nginx/sites-enabled/www.server2.com /etc/nginx/sites-enabled/
Untuk pengetesan, jangan lupa tambahkan file index di dalam vhost root directory www.server2.com untuk identifikasi ini adalah web server 2.
Setelah itu restart nginx.
$ sudo systemctl restart nginx
Konfigurasi pada server 2 sudah selesai.
Silahkan coba akses ke masing-masing domain untuk memastikan bahwa traffic sudah sesuai dan benar serta menampikan file index dari masing-masing domain. Hal yang sama juga bisa kita terapkan untuk koneksi https pada port 443 dan ssl-nya bisa kita tempatkan di sisi reverse proxy maupun di sisi web server aslinya, keduanya bisa dilakukan.