Configuring Nginx as Reverse Proxy and Load Balancing Web Application
1. Configuring Nginx as Reverse Proxy and Load Balancing Web
Application
1. Apa sih Proxy Server
Pada jaringan komputer, proxy server adalah sebuah server (sebuah sistem komputer atau sebuah
aplikasi) yang bertugas sebagai penengah dari request yang datang dari client mencari data ke server
lain. Ketika sebuah client terhubung ke sebuah proxy server, meminta layanan-layanan, seperti file,
koneksi, halaman web atau data lain yang boleh diakses dan berasal dari sebuah server lain, proxy server
akan mengevaluasi permintaan tersebut sebagai dengan cara mempermudah pengaksesan dan
mengontrol kompleksitas permintaan tersebut. Saat ini kebanyakan proxy adalah web proxy, sebagai
sebuah alat yang memfasilitasi pengaksesan content-content dari World Wide Web.
2. Jenis-Jenis Proxy
Ada 3 macam jenis proxy yang dibedakan berdasarkan tata letaknya.
• Forward Proxy
Forward Proxy adalah proxy yang bertugas meneruskan permintaan konektivitas client ke server-
server yang di kehendaki oleh client, forward proxy memiliki kemampuan untuk mengakses
content-content kemana saja (dalam hal ini semua server pada internet)
[4]
• Open Proxy
Open proxy adalah sebuah forwarding proxy yang bisa diakses oleh siapapun di dalam jaringan
internet. Open proxy biasanya digunakan user untuk menyembunyikan IP address pengguna
ketika sedang melakukan browsing internet (hacker style/safe browsing).
2. • Reverse Proxy
Reverse proxy atau Surrogate adalah sebuah proxy server yang muncul ke client sebagai sebuah
server yang tidak biasa, request dari client akan diteruskan ke satu atau lebih server yang
nantinya akan memproses request tersebut, response dari sebuah reverse proxy seakan-akan
seperti datang dari server sebenarnya yang menangani request tersebut.
Reverse proxy di pasang di dalam jaringan web server atau didalam web server itu sendiri, semua
trafik yang datang dari internet yang tertuju kepada satu atau lebih web server dalam jaringan
internal web server tersebut harus melewati proxy server terlebih dahulu. Kata reverse dalam
reverse proxy merupakan kebalikan makna dari forward proxy, sebab reverse proxy terletak
lebih dekat kepada web server dan hanya melayani content-content terbatas yang ada web
server tersebut.
Ada beberapa alasan orang meng-install reverse proxy diantaranya: Encryption, Load Balancing,
Serve/Cache Static Content, Kompresi, Spoon Feeding, Security dan lain-lain.
Sumber: http://en.wikipedia.org/wiki/Proxy_server
3. Reverse Proxy terbuat dari?
Reverse proxy dapat dibuat dengan memanfaatkan aplikasi server seperti, Apache, atau Nginx. Dengan
menambahkan modul-modul tertentu dan meng-oprek konfigurasi, Apache dapat dimanfaatkan
menjadi sebuah reverse proxy. Sementara untuk Nginx, Nginx sendiri datang dengan kemampuan
default sebagai sebuah reverse proxy dan load balancing server, sehingga tidak perlu menambahkan
modul-modul dalam untuk membuat nginx menjadi sebuah reverse proxy, hanya perlu sedikit
melakukan konfigurasi, maka nginx siap dijadikan sebagai sebuah reverse proxy dan load balancing
server. Lebih jauh mengenai Apache sebagai web proxy bisa dibaca di :
http://blog.josescalia.net/2012/02/menjadikan-apache-sebagai-proxy-web.html
3. 4. Diagram Arsitektur Reverse proxy dan Load Balancing Server
HTTP Request
Reverse
Proxy/Load
Balancing
Configured Proxy or Load Balancing
Application Application
Server 01 Server 02
Secara flow diagram alur HTTP request yang di-intercept oleh proxy seperti gambar di atas, setiap
request yang datang dari client akan di terima oleh reverse proxy server, dan kemudian proxy server akan
meneruskan ke application server agar request tersebut di proses oleh application server, dan nantinya
hasil dari proses tersebut akan dikembalikan ke client melewati route yang sama.
Dalam penerapannya, application server ini bisa lebih banyak dari gambar diatas, tergantung dari
pertimbangan banyaknya request yang masuk ke application tersebut, semakin banyak node application
server yang ada, secara relatif request juga seharusnya bisa diproses bisa lebih cepat karena tidak harus
mengantri atau menunggu request sebelumnya selesai diproses. Tapi pertimbangan hardware juga
menjadi faktor banyaknya node application server yang hendak dibuat, sebab setiap node application
server terhitung sebagai sebuah instance aplikasi yang tentunya menggunakan memory yang ada pada
CPU.
5. How To Use Nginx as Reverse Proxy and Load Balancing Server
Seperti yang sudah dipaparkan di atas, bahwa Nginx datang dengan kemampuan default sebagai reverse
proxy dan cukup sedikit memodifikasi file konfigurasi nginx, maka nginx siap dijadikan sebagai reverse
proxy.
Mari kita mencoba membuat sebuah skenario arsitektur sebuah reverse proxy, dimana dalam skenario
tersebut kita inginkan agar setiap kali penambahan node application server, kita tidak mengubah
setting-an pada file utama konfigurasi nginx, tetapi kita menambahkan file konfigurasi baru saja.
4. Berikut ini langkah-langkahnya, dengan asumsi nginx sudah ter-install dalam operating system:
1. Buka file nginx.conf yang terletak pada folder instalasi nginx, dalam OS fedora 14 file ini terletak
pada direktori /etc/nginx/. Perhatikan baris-baris pada file tersebut yang isinya seperti dibawah
ini:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
Pada baris kode yang ditebalkan dapat diartikan seperti ini, nginx akan membaca seluruh file
dengan ekstensi .conf yang ada pada folder /etc/nginx/conf.d/, nah disinilah nantinya kita akan
memodifikasi setting-an nginx.
2. Rename file default.conf menjadi default.conf.bak yang ada pada folder /etc/nginx/conf/.
Dengan cara ini maka konfigurasi default nginx tidak akan lagi terbaca pada saat service nginx di
start.
3. Pada folder yang sama letaknya dengan default.conf tersebut, buatah sebuah file dengan nama
real_nginx.conf, penamaan ini tidak harus sama, hanya saja ekstensi file tersebut dan folder
tempat meletakkan file tersebut mengikuti setting-an yang ada pada nginx.conf pada langkah 1.
Adapun contoh isi dari file real_nginx.conf tersebut adalah sebagai berikut:
#OVERRIDE NGINX CONFIGURATION
#---------------------------------------------------------
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/nginx_balancer.log;
#include all web application configuration
include /etc/nginx/conf.d/cluster/*.conf;
}
#---------------------------------------------------------
5. Pada file ini yang dapat kita pahami adalah sebagai berikut, nginx akan listen pada port 80,
dengan nama server-nya adalah localhost, dan dimana semua akses yang masuk ke dalam port
80 dalam service nginx tersebut akan dicatat dalam file /var/log/nginx/nginx_balancer.log.
Kemudian nginx akan membaca lagi semua konfigurasi yang terletak pada folder
/etc/nginx/conf.d/cluster/. Nah disinilah point utama dari skenario yang kita buat diatas, yaitu
setiap kita ingin menambahkan node application server kita hanya menambah file konfigurasi
pada folder ini saja, tanpa harus mengubah setting-an file utama konfigurasi yaitu file
real_nginx.conf.
4. Langkah berikutnya sebetulnya adalah langkah yang bisa dilakukan berulang-ulang sesuai
dengan keinginan kita menambahkan node application server. Buat sebuah file konfigurasi yang
merepresentasikan sebuah reverse proxy seperti contoh berikut ini:
###################### DOCUMENTATION #############################
# Each folder on web application must register here as a proxy_pass
# and the proxy pass must pointing to name of upstream which is
# configured on the /etc/nginx/conf.d/nginx_balancer.conf
#-----------------------------------------------------------------
location /jasperserver {
proxy_pass http://127.0.0.1:3030/jasperserver;
}
############################END SCRIPT#############################
Contoh konfigurasi diatas adalah sebuah konfigurasi yang membuat supaya aplikasi jasperserver
yang tadinya berjalan pada port 3030 bisa diakses pada port 80 dengan URL
http://somehost/jasperserver. Inilah yang disebut dengan reverse proxy, dimana sebetulnya
client hanya tahu me-request http://somehost/jasperserver, padahal di dalamnya reverse proxy
akan meneruskan request tersebut ke http://127.0.0.1:3030/jasperserver.
5. Jika langkah diatas adalah membuat sebuah konfigurasi reverse proxy maka source code
dibawah ini adalah konfigurasi Load Balancing.
###################### DOCUMENTATION #############################
# Each folder on web application must register here as a proxy_pass
# and the proxy pass must pointing to name of upstream which is
# configured on the /etc/nginx/conf.d/nginx_balancer.conf
#-----------------------------------------------------------------
location /tomcat_admin {
proxy_pass http://tc_balancer;
}
location /manager{
proxy_pass http://tc_balancer;
}
location /docs{
proxy_pass http://tc_balancer;
}
location /examples{
proxy_pass http://tc_balancer;
}
location /host-manager{
proxy_pass http://tc_balancer;
}
############################END SCRIPT#############################
6. Pada source diatas terlihat ada URL yang tidak biasa, yaitu http://tc_balancer, URL ini adalah
URL Load Balancing yang harus kita setting pada file konfigurasi utama nginx, agar URL ini bisa
terbaca oleh nginx maka konfigurasi utama harus kita tambahkan seperti contoh dibawah ini:
#########################################################
#BALANCER FOR TOMCAT RUNNING ON PORT 18080 and 28080 etc
upstream tc_balancer {
ip_hash;
server 127.0.0.1:18080;
server 127.0.0.1:28080;
server 127.0.0.1:38080;
server 127.0.0.1:48080;
server 127.0.0.1:58080;
}
#---------------------------------------------------------
#OVERRIDE NGINX CONFIGURATION
#---------------------------------------------------------
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/nginx_balancer.log;
#include all web application configuration
include /etc/nginx/conf.d/cluster/*.conf;
}
#---------------------------------------------------------
Dengan tambahan yang digaris tebal diatas, maka url tc_balancer akan bisa dibaca oleh nginx
sebagai sebuah URL yang valid, dalam code tersebut terlihat bahwa upstream tc_balancer akan
mengarah ke server-server yang terdaftar dalam blok kurawal.
Demikianlah pemanfaatan Nginx sebagai sebuah Reverse Proxy dan Load Balancing Web Application.
Contoh diatas adalah sebuah contoh sederhana pemanfaatan Nginx yang bisa dikembangkan lebih
kompleks lagi.
Semoga Bermanfaat
Salam
Josescalia
Created For HITZ (Hack In The Zoo) 2013-#1 Kebun Raya Bogor (16 Februari 2013)