Configuring Nginx as Reverse Proxy and Load Balancing Web Application

3,223 views

Published on

Materi HITZ 20133#1

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,223
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
143
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Configuring Nginx as Reverse Proxy and Load Balancing Web Application

  1. 1. Configuring Nginx as Reverse Proxy and Load Balancing Web Application1. Apa sih Proxy ServerPada jaringan komputer, proxy server adalah sebuah server (sebuah sistem komputer atau sebuahaplikasi) yang bertugas sebagai penengah dari request yang datang dari client mencari data ke serverlain. 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 serverakan mengevaluasi permintaan tersebut sebagai dengan cara mempermudah pengaksesan danmengontrol kompleksitas permintaan tersebut. Saat ini kebanyakan proxy adalah web proxy, sebagaisebuah alat yang memfasilitasi pengaksesan content-content dari World Wide Web.2. Jenis-Jenis ProxyAda 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. 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_server3. Reverse Proxy terbuat dari?Reverse proxy dapat dibuat dengan memanfaatkan aplikasi server seperti, Apache, atau Nginx. Denganmenambahkan modul-modul tertentu dan meng-oprek konfigurasi, Apache dapat dimanfaatkanmenjadi sebuah reverse proxy. Sementara untuk Nginx, Nginx sendiri datang dengan kemampuandefault sebagai sebuah reverse proxy dan load balancing server, sehingga tidak perlu menambahkanmodul-modul dalam untuk membuat nginx menjadi sebuah reverse proxy, hanya perlu sedikitmelakukan konfigurasi, maka nginx siap dijadikan sebagai sebuah reverse proxy dan load balancingserver. Lebih jauh mengenai Apache sebagai web proxy bisa dibaca di :http://blog.josescalia.net/2012/02/menjadikan-apache-sebagai-proxy-web.html
  3. 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 02Secara flow diagram alur HTTP request yang di-intercept oleh proxy seperti gambar di atas, setiaprequest yang datang dari client akan di terima oleh reverse proxy server, dan kemudian proxy server akanmeneruskan ke application server agar request tersebut di proses oleh application server, dan nantinyahasil dari proses tersebut akan dikembalikan ke client melewati route yang sama.Dalam penerapannya, application server ini bisa lebih banyak dari gambar diatas, tergantung daripertimbangan banyaknya request yang masuk ke application tersebut, semakin banyak node applicationserver yang ada, secara relatif request juga seharusnya bisa diproses bisa lebih cepat karena tidak harusmengantri atau menunggu request sebelumnya selesai diproses. Tapi pertimbangan hardware jugamenjadi faktor banyaknya node application server yang hendak dibuat, sebab setiap node applicationserver terhitung sebagai sebuah instance aplikasi yang tentunya menggunakan memory yang ada padaCPU.5. How To Use Nginx as Reverse Proxy and Load Balancing ServerSeperti yang sudah dipaparkan di atas, bahwa Nginx datang dengan kemampuan default sebagai reverseproxy dan cukup sedikit memodifikasi file konfigurasi nginx, maka nginx siap dijadikan sebagai reverseproxy.Mari kita mencoba membuat sebuah skenario arsitektur sebuah reverse proxy, dimana dalam skenariotersebut kita inginkan agar setiap kali penambahan node application server, kita tidak mengubahsetting-an pada file utama konfigurasi nginx, tetapi kita menambahkan file konfigurasi baru saja.
  4. 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. 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. 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 lebihkompleks lagi.Semoga BermanfaatSalamJosescaliaCreated For HITZ (Hack In The Zoo) 2013-#1 Kebun Raya Bogor (16 Februari 2013)

×