Nginxのロードバランサー構築
■Nginxのロードバランサー設定の目次NginxのRPMパッケージからインストール
■nginx.org提供のリポジトリからnginxのパッケージをインストール# wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm # rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/6/$basearch/ gpgcheck=0 enabled=0
# yum install --enablerepo=nginx nginx
Nginxの基本設定
Nginxの設定ファイルについて
■設定ファイル内容coreモジュールの設定
events {
    eventモジュールの設定
}
http {
    httpモジュールの設定
}
mail {
    mailモジュールの設定
}
http {
    httpモジュールの設定
    server {
        サーバ毎の設定
        location PATH {
            URI毎の設定
        }
        location PATH {
            URI毎の設定
	}
        ...
    }
    server {
        ...
    }
}
# vi /etc/nginx/nginx.conf
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/lb.conf;
}
Nginx基本設定の説明
■ログフォーマットlog_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
# vi /etc/nginx/conf.d/lb.conf
server {
    listen       80;
    server_name  www.hoge.co.jp;
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
   #バックエンドサーバへのクライアントIP引渡し
   # クライアントの IP アドレス($proxy_add_x_forwarded_for;)
    proxy_set_header Host            $host;
    proxy_set_header X-Real-IP       $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    location / {
        proxy_pass http://backend;
    }
}
   #ロードバランサ設定
upstream backend {
      ip_hash;
      server 172.20.1.201:80 max_fails=3 fail_timeout=30s ;
      server 172.20.1.202:80 max_fails=3 fail_timeout=30s ;
      server 127.0.0.1:8080  down;
}
    
Nginxの仮想サイト設定の説明
■仮想ホスト    error_page   500 502 503 504  /error.html;
    location = /error.html {
        root   /data/www/www.hoge.co.jp/error/;
    }
※/data/www/www.hoge.co.jp/error/error.htmlをSorryページの内容にしておく。         proxy_set_header Host            $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # クライアントの IP アドレス
        proxy_set_header X-Forwarded-Host $host; # オリジナルのホスト名。クライアントが Host リクエストヘッダで渡す。
        proxy_set_header X-Forwarded-Server $host; # プロキシサーバのホスト名
        proxy_set_header X-Real-IP $remote_addr;
※X-Forwarded-ForをApacheのログフォーマットに追加する設定は後述する。 proxy_pass http://backend; upstream backend
| セッション維持 | ソースIPによるセッション維持 ※1 | 
|---|---|
| メンバーサーバ | 172.20.1.201:80 172.20.1.202:80  | 
| サーバオプション | 失敗回数:3回 TimeOut:30秒  | 
| Sorryサーバ | 127.0.0.1:8080 | 
   upstream backend {
      ip_hash;
      server 172.20.1.201:80 max_fails=3 fail_timeout=30s ;
      server 172.20.1.202:80 max_fails=3 fail_timeout=30s ;
      server 127.0.0.1:8080  down;
    }
| Serverオプション | 概要 | 
|---|---|
| weight | (初期値=1) 全サーバーのweight値の合計を分母(但しbackupサーバは除く)にし、ここで分子を指定することで、この比率がサーバー群の中の対応サーバーの分散比率とする | 
| max_fails | 接続失敗時の最大チャレンジ回数 | 
| fail_timeout | 30s 接続失敗を判断するタイムアウト時間。 但し proxy_connect_timeout と proxy_read_timeout によっても関係する。 | 
| down | 常にダウンしているサーバーに指定。但しip_hash指定があればハッシュは作成される | 
| backup | backup指定がない通常サーバーがすべてダウンした時にこのサーバーに接続する | 
Nginxのログローテート
RPMでインストールした場合、下記の設定がすでにされている。# cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
        daily
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 640 nginx adm
        sharedscripts
        postrotate
                [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
        endscript
}
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Forwarded-For}i" combined
WEBサーバの関連記事
・Apache構築手順【基本設定】Nginxおすすめ書籍
    | 
  マスタリングNginx  | 
    | 
 ハイパフォーマンスHTTPサーバ Nginx入門  |