Configuring Nginx as Reverse Proxy and Load Balancing Web Application

6
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).

description

Materi HITZ 20133#1

Transcript of Configuring Nginx as Reverse Proxy and Load Balancing Web Application

Page 1: Configuring Nginx as Reverse Proxy and Load Balancing Web Application

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).

Page 2: Configuring Nginx as Reverse Proxy and Load Balancing Web Application

• 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

Page 3: Configuring Nginx as Reverse Proxy and Load Balancing Web Application

4. Diagram Arsitektur Reverse proxy dan Load Balancing Server

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.

Reverse

Proxy/Load

Balancing

HTTP Request

Application

Server 01

Application

Server 02

Configured Proxy or Load Balancing

Page 4: Configuring Nginx as Reverse Proxy and Load Balancing Web Application

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:

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:

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 "$h ttp_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; }

#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; } #-------------------------------------------------- -------

Page 5: Configuring Nginx as Reverse Proxy and Load Balancing Web Application

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:

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 upstr eam which is # configured on the /etc/nginx/conf.d/nginx_balance r.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############# ################

###################### DOCUMENTATION ############## ############### # Each folder on web application must register here as a proxy_pass # and the proxy pass must pointing to name of upstr eam which is # configured on the /etc/nginx/conf.d/nginx_balance r.conf #-------------------------------------------------- --------------- location /jasperserver { proxy_pass http://127.0.0.1:3030/jasperserver; } ############################END SCRIPT############# ################

Page 6: Configuring Nginx as Reverse Proxy and Load Balancing Web Application

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:

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)

######################################################### #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; } #-------------------------------------------------- -------