Nginx sebagai http server

Nginx sebagai reverse proxy

Nginx (baca: engine x) adalah server HTTP dan reverse proxy gratis berbasis open-source berkemampuan tinggi. Perangkat lunak ini diciptakan oleh Igor Sysoev pada tahun 2002, dan dirilis untuk pertama kalinya secara umum pada tahun 2004. Nginx terkenal karena performanya yang tinggi, stabil, memiliki banyak fitur, mudah dikonfigurasi, dan menggunakan sedikit sumberdaya pada server.
Kalau saya sebutkan kata Proxy mungkin yang pertama terlintas dibenak orang kebanyakan adalah server yang berjalan antara komputer kita (client) dan internet. Dan umumnya berfungsi sebagai caching halaman-halaman web yang pernah dikunjungi, pengalokasian bandwidh, atau rule mengenai user, content filtering dan fungsi-fungsi lainnya yang diusung oleh bermacam aplikasi Proxy.
Sebenarnya jenis proxy tersebut adalah Forward Proxy. Sebaliknya, ada jenis Proxy yang berjalan dari sisi lainnya yaitu sisi server, Web Server lebih tepatnya, dan inilah yang dimaksud dengan Reverse Proxy. Pada Reverse Proxy ini, Proxy berada di garda depan menerima Rekues HTTP. Request (umumnya diport 80). Di port 80 Reverse Proxy tidak menggantikan fungsi Web Server, melainkan dia akan melanjutkan rekues HTTP tersebut ke Web Server untuk diolah.

Kelebihan Nginx Dibanding Apache?

Nginx, yang dibaca “engine x” memiliki keistimewaan tersendiri dibandingkan Apache. Chris Lea ketika di WordCamp SF 2008 pernah menganalogikan, Apache itu bagaikan Microsoft Word, memiliki jutaan fungsi tetapi Anda hanya butuh 6. Nginx melakukan 6 hal itu, dan dia melakukannya 50 kali lebih cepat daripada Apache.”

Nginx biasanya dikenal sebagai Web server yang gesit dan efisien dalam menampilkan konten statik. Nginx diklaim minim dalam penggunaan memori dan sangat direkomendasikan untuk website-website yang berjalan di atas VPS. Untuk mengenal lebih dekat, marilah kita telaah bersama-sama alasan nginx bisa berlari lebih kencang.

Dari Arsitektur

Pertama kita harus tahu perbedaan arsitektur antara dua Web server ini. Apache merupakan process-based sedangkan Nginx merupakan event-based. Mungkin pertanyaan Anda berikutnya adalah “Lalu memangnya kenapa kalau arsitektur Nginx event-based?” Dikarenakan event-based mampu memanfaatkan seminimal mungkin thread untuk memproses request dari user, sehingga memori yang terpakai di Nginx menjadi minimal. Karena memori yang dipakai sangat kecil, hasilnya server menjadi ringan dan jauh lebih responsif.

Analogi Nginx

mari kita mengambil sebuah analogi. Analogi ini terinspirasi dari Web daverecycles.com. Anggap Web Server adalah sebuah restoran yang menerima orderan lewat telepon. Ketika user mengakses halaman Web, maka analoginya adalah seseorang menelepon ke restoran untuk memesan makanan.

Ceritanya terdapat dua buah restoran terkenal yaitu restoran Apache dan restoran Nginx. Di restoran Apache ketika seseorang menelepon untuk memesan makanan, maka operator akan mengangkat telepon, mencatat pesanan dan menunggu makanan siap sambil terus mengangkat telepon. Ketika makanan siap baru memberitahukan ke pelanggan dan menutup telepon. Kalau ada orang lain yang menelepon, maka diperlukan operator lain yang mengangkat. Jadi kalau dalam satu waktu ada 10 orang yang menelepon, maka diperlukan 10 operator untuk melayani.

Berbeda dengan restoran Nginx. Di restoran ini, sang operator lebih terlatih dan terdidik. Ketika seseorang memesan makanan, sang operator akan mencatatnya, lalu menutup telepon. Setelah makanan sudah siap, baru menelepon kembali ke pelanggan. Jadi sang operator bisa melayani beberapa pesanan sekaligus.

Pada cerita di atas, operator telepon merupakan analogi dari “thread”. Thread-lah yang biasanya menghabiskan memori. Jadi semakin banyak thread yang terpakai, semakin banyak memori yang terkuras. Itu sebabnya Apache tidak akan mengalami masalah selama hanya sedikit orang yang mengaksesnya. Tetapi baru akan menjadi berat dan lambat kalau sudah banyak orang mengaksesnys sekaligus.

Kira-kira sampai sejauh manakah kemampuan Nginx menghemat memori dibandingkan dengan Apache? Bob Ippolito memiliki pengalaman. Dia memiliki sebuah server untuk menangani sepuluh juta request per hari, yang berarti beberapa ratus request per detik. Ketika menggunakan Nginx (setelah berbagai konfigurasi dan tweak), puncak tertinggi penggunaan memori hanya 15MB dan 10% CPU. Dengan beban yang sama, dijalankan pada Apache ternyata Apache gagal akibat menjalankan terlalu banyak thread. Jumlah memori yang terpakai juga adalah 400MB untuk semua stack thread. Dan bahkan terjadi memory leak sekitar 20MB setiap jamnya.

Tetapi kalau menyangkut masalah popularitas dan jumlah pengguna, maka Nginx memang belum bisa menandingi Apache. Jumlah hosting di Indonesia yang menyediakan server Nginx sendiri tidak terlalu banyak. Lagipula Apache begitu mendominasi di dunia Internet. Pada tahun 2009 saja, Apache sudah menembus 100 juta website. Dan per bulan Januari 2012, 58% dari selurh website di dunia menggunakan Apache.

Walau posisi Apache sulit tergeser, ternyata Nginx juga tidak berpangku tangan. Jumlah Web yang menggunakan Nginx pada awal tahun 2011 adalah 15 juta, dan per bulan November 2011 sudah mencapai 43 juta. Itu artinya peningkatan 300%! Itu membuktikan Nginx mulai cukup populer.

Instalasi Nginx

Dalam catatan kali ini, mesin yang digunakan CentOS 5.6 (64bit)
.:: install epel
Karena default repo pada mesin tidak ada paket nginx, maka perlu menambahkan EPEL. EPEL (Extra Packages for Enterprise Linux) adalah kumpulan paket-paket rpm dari fedora yang dapat digunakan pada Enterprise Linux yaitu RHEL dan CentOS.

[root@martin.server ~]# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

.:: install nginx

[root@martin.server ~]# yum install nginx

.:: konfigurasi nginx sebagai reverse proxy
buat file reverse proxy

[root@martin.server ~]# cd /etc/nginx/conf.d/

[root@martin.server conf.d]# nano proxy.conf

###isi dari file proxy.conf

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

client_max_body_size 10m;

client_body_buffer_size 128k;

proxy_connect_timeout 90;

proxy_send_timeout 90;

proxy_read_timeout 90;

proxy_buffers 32 4k;

.:: set-up proxy_pass pada vhost / nginx.conf

[root@martin.server ~]# cd /etc/nginx/conf.d/

[root@martin.server conf.d]# nano namadomain.com.conf

###isi dari file namadomain.com.conf

server {

listen 80;

server_name namadomain.com www.namadomain.com;

access_log /var/log/nginx/namadomain.com.access.log ;

error_log /var/log/nginx/namadomain.com.error.log ;

location / {

proxy_pass http://10.100.100.99:8080/ ; #ip web server

include /etc/nginx/conf.d/proxy.conf;

}

}

.:: testing konfigurasi dan restart nginx

[root@martin.server conf.d]# nginx -t

[root@martin.server conf.d]# /etc/init.d/nginx restart

.:: install rpaf module

mod_rpaf merupakan modul yang diperlukan untuk menerima IP sebenar daripada nginx.

Jika tanpa menggunaka module ini, webserver akan menerima ip dari server nginx.

[root@martin.server conf.d]# yum install mod_rpaf.x86_64

setelah install rpaf, pastikan di konfigurasi httpd.conf module ter-load

LoadModule rpaf_module /usr/lib64/httpd/modules/mod_rpaf-2.0.so

konfigurasi httpd.conf untuk menggunakan reverse proxy nginx

Listen 8080

.:: enable rpaf module pada vhost apache

[root@server01 ~]# nano /etc/httpd/conf/httpd.conf

### add these line in VirtualHost configuration

RPAFenable On

RPAFsethostname On

RPAFproxy_ips 10.100.100.99 ### can use multiple IP address

.:: restart apache

[root@server01 ~]# /etc/init.d/httpd restart

.:: cek port

[root@server01 ~]# netstat -tlnup |grep 80

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7640/nginx.conf

tcp 0 0 :::8080 :::* LISTEN 7654/httpd

testing

akses namadomain.com, seharusnya menunjukkan halaman dari apache, bukan halaman nginx

Sumber :

http://www.computesta.com/blog/2012/02/nginx-kelebihan-dibanding-apache/#.Us4e8vuK9KZ

http://www.wowrack.co.id/blog/nginx-sebagai-reverse-proxy/