Friday, January 31, 2014

Cara Konfigurasi Nginx Sebagai Load Balancer

                            +--------------------+
                            | Nginx Load Balancer|
                            +----------+---------+
                                       |
                                       |
                +----------------------+---------------------+
                |                      |                     |
                |                      |                     |
                v                      v                     v
         +---------------+     +---------------+     +---------------+
         | Backend App 1 |     | Backend App 2 |     | Backend App 3 |
         +------+--------+     +-------+-------+     +-------+-------+
                |                      |                     |
                |                      |                     |
                |                      |                     |
                |                      v                     |
                |              +---------------+             |
                +------------> |Database Server|<------------+
                               +---------------+
Nginx selain sudah terkenal sebagai web server, saat ini juga terkenal sebagai load balancer dengan performance yang sangat baik. Berikut ini adalah cara konfigurasi Nginx versi 1.4.4 pada Linux Debian 6 dengan asumsi Nginx telah terinstall pada direktori standar Linux Debian.

1. Buka Konfigurasi /etc/nginx/nginx.conf

2. Tambahkan baris berikut didalam block http.

upstream mybackend {
  # Weight adalah bobot yang digunakan seberapa sering backend server tersebut dipilih untuk memproses request.
  # Default weight adalah 1
  server 192.168.0.102;
  server mybackend2.example.com:8080 weight=4;
  server unix:/tmp/mybackend3;
}

server {
  listen 80;
  server_name example.com www.example.com;
  location / {
    proxy_pass http://mybackend;
      
    # header ini digunakan agar backend app mengenal request domain sebagai example.com atau www.example.com, bukan sebagai mybackend
    proxy_set_header Host $http_host;

    # header ini digunakan agar IP yang diproses aplikasi backend berasal dari IP client, bukan dari load balancer.
    proxy_set_header X-Real-IP $remote_addr;
    # beberapa aplikasi atau framework menggunakan X-Forwarded-For untuk mendapatkan alamat IP.
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

Konfigurasi keseluruhan kurang lebih seperti dibawah ini (Gist: https://gist.github.com/kuntoaji/8728290).

# default nginx configuration
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;

   # mulai dari sini :)
  upstream mybackend {
    server 192.168.0.102:8080;
    server mybackend2.example.com:8080 weight=4;
    server mybackend3.example.com weight=2;
    server unix:/tmp/backend4;
  }

  server {
    listen 80;
    server_name example.com www.example.com;
    location / {
      proxy_pass http://mybackend;
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
    }
  }
}

3. Setelah selesai edit /etc/nginx/nginx.conf, login sebagai root, dan restart dengan menjalankan perintah
service nginx restart


Untuk penjelasan lebih lanjut mengenai Load Balancing pada Nginx, saya rekomendasikan artikel How To Set Up Nginx Load Balancing dan Nginx Official Documentation HttpUpstreamModule.

No comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...