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