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入門 |