[FlashBackBlog] Menggunakan nGinX sebagai Reverse Proxy

Nginx, adalah sebuah webserver opensources yang dikembangkan dari keturunan Apache. Nginx, seperti apache, memiliki fungsi melakukan publikasi dokumen dalam sistem, ke sisi publik, melalui protokol HTTP atau port default 80. Nginx, adalah singkatan dari Engine-X. nGinX. Memiliki tingkat keringanan eksekusi dokumen yang lebih kencang daripada Apache. Namun tentu saja beberapa kekurangannya adalah kelengkapan modul yang diperlukan oleh web, kalah oleh Apache. Namun demikian untuk web-web biasa, atau sistem informasi biasa, tidak terlalu membutuhkan modul-modul terlalu lengkap.

Nginx, sudah ada di dalam repository linux, baik berbasis Redhat, Debian, Ubuntu, dan lain sebagainya. Dapat juga dilakukan instalasi secara custom dari source code. Untuk instalasi secara repository, dapat dilakukan demikian :

yum install nginx
apt-get install nginx
zypper install nginx

dan lain sebagainya.

Untuk instalasi secara source code, dapat dilakukan hal berikut ini :
1. download source-code : http://nginx.org/en/download.html
2. extract : tar -xzvf nginx
3. configure kompilasi : cd nginx; ./configure –prefix=/opt/nginx
4. kompilasi : make && make install

Untuk nginx berbasis repository, dapat langsung distart :

/etc/init.d/nginx start 

Atau

service nginx start

Untuk menghentikannya, dilakukan dengan cara mengganti kata start dengan stop. Untuk yang berasal dari kompilasi sourcecode, dapat dilakukan seperti berikut:

/opt/nginx/sbin/nginx

Sedangkan mematikannya dapat dengan

killall -9 nginx

Untuk memastikan apakah nginx hidup atau mati dapat dilakukan dengan :

ps ax | grep nginx

Konfigurasi nginx cukup mudah. Bagi yang telah terbiasa dengan konfigurasi apache, tentu tidak akan sulit melakukan konfigurasi nginx. Ada sedikit perbedaan sintaks konfigurasi, namun masih mudah untuk diikuti. Nginx, dalam operasionalnya akan dipanggil dengan nama panggil atau domain atau yang disebut dengan server name. Lokasi file konfigurasi nginx berada di :

/etc/nginx/nginx.conf

atau ada di

/opt/nginx/nginx.conf

Konfigurasi yang paling perlu diperhatikan adalah pada bagian :

http {
    include       /etc/nginx/mime.types;

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

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Dengan bagian

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

Adalah bagian yang digunakan untuk memuat konfigurasi modul dan konfigurasi virtualhost. Tentang virtualhost dapat dilihat pada bagian sebelumnya.

Pengaturan virtualHost dapat dilakukan dengan melakukan penambahan file pada /etc/nginx/sites-enabled/ seperti berikut ini:

ls /etc/nginx/sites-enabled/

bimosaurus.com.conf
blog.bimosaurus.com.conf
blog2.bimosaurus.com.conf

Isi tiap filenya kurang lebih akan sebagai berikut.

   server {
      listen 80;
      server_name bimosaurus.com www.bimosaurus.com;
      acccess_log /var/log/nginx/bimosaurus.com_access_log;

      location / {
         root /home/bimosaurus/public_html
         index  index.php index.html index.htm;
      }

   }

Hal tersebut berfungsi jika nginx akan digunakan sebagai web server murni yang akan membuka dokumen yang berada di direktori /home/bimosaurus/public_html dibuka sebagai bimosaurus.com. Namun nginx juga dapat difungsikan sebagai Reverse Proxy, yaitu sebuah webserver depan (proxy depan) yang mengambil resource web yang ada di belakangnya. Biasanya model reverse proxy ini digunakan untuk web-web yang memiliki static content sangat besar dan memiliki beban tarik sangat tinggi. Nginx akan melakukan penyimpanan content-content static dalam fungsi proxynya.

server {
        listen   222.122.221.121:80;
        server_name  bimosaurus.com www.bimosaurus.com;
        access_log  /var/log/nginx/bimosaurus.com.access.log;
        error_log  /var/log/nginx/bimosaurus.com.error.log;
        location /doc {
                root   /usr/share;
                autoindex on;
                allow 127.0.0.1;
                deny all;
        }
                location ^~ /(images|css|js) {
                root   /home/bimo/public_html/bimosaurus.com;
                access_log  /var/log/nginx/bimosaurus.com.direct.log ;
        }
        location ~* \.(js|css|rdf|xml|ico|txt|gif|jpg|png|jpeg)$ {
                root   /home/bimosaurus/public_html/;
                access_log  /var/log/nginx/bimosaurus.com.direct.log;
        }
        location / {
            proxy_pass http://127.0.0.1:80;
            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    512k;

            proxy_connect_timeout      900;
            proxy_send_timeout         900;
            proxy_read_timeout         900;

            proxy_buffer_size          254k;
            proxy_buffers              8 64k;
            proxy_busy_buffers_size    256k;
            proxy_temp_file_write_size 256k;
        }
    }

Dalam contoh diatas, saya mengalihkan panggilan bimosaurus.com, akan saya ambilkan sourcenya dari http://127.0.0.1:80, dari satu mesin yang sama, namun dengan listen IP Address yang berbeda. Adapun ada bagian tengah yang saya fungsikan untuk mengambil secara langsung direct access mengambil konten-konten statik. Syarat bisa hidup dua port 80 pada satu mesin adalah, tidak boleh memiliki IP Listen yang sama.
Jadi pada bagian /etc/nginx/nginx.conf bagian listen dihapus seperti 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 "$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;
server_tokens Off;
}

Dan pada bagian apache, Listen diarahkan ke 127.0.0.1. Yaitu pada file /etc/httpd/conf/httpd.conf

Listen 127.0.0.1:80

Dan pada virtualHost dimasukkan sebagai berikut


ServerName bimosaurus.com
ServerAlias www.bimosaurus.com
DocumentRoot /home/bimosaurus/public_html

Untuk pengaturan Apache dapat dilihat pada https://blogit.bimosaurus.com/2015/06/13/flash-back-virtualhost-apache-dan-nginx/

Masalah listen address, silakan melihat pada bagian berikut : https://blogit.bimosaurus.com/2015/02/16/konsep-listen-dalam-network-service/, pastikan selalu menggunakan netstat -tapn untuk dapat melihat port dan IP Address yang menyala.

One thought on “[FlashBackBlog] Menggunakan nGinX sebagai Reverse Proxy

Leave a Reply to widyartono Cancel reply

Your email address will not be published. Required fields are marked *