nginxのリバプロ設定方法をメモしておきます。
環境情報
- nginx version: nginx/1.15.12
参考情報
upstreamコンテキストを作成
Module ngx_http_upstream_module
server
ディレクティブで、バックエンドのサーバを指定- 複数指定する場合は、ラウンドロビンでForwardされる
- サーバ毎に重みや、接続試行回数をパラメータで指定できる
keepalive_timeout
ディレクティブで、バックエンドサーバとkeepaliveを設定可能
upstream web-server { server 172.31.40.222; keepalive_timeout 60s; }
locationコンテキストにて、proxy_passを指定
Module ngx_http_proxy_module - Proxy_pass
proxy_pass
ディレクティブにて、Forward先となるサーバーを指定- upstreamコンテキストで作成したサーバ郡を指定できる
location / { proxy_pass http://web-server; }
serverコンテキストにて、リバプロ用設定を実施
proxy_set_header
にて、バックエンドサーバに渡すリクエストヘッダを定義- 上で
keepalive_timeout
にてkeepaliveの通信を有効としており、HTTP 1.1より利用できるものなので、proxy_http_version
にて利用するHTTPのバージョンを指定 - バックエンドサーバーとのタイムアウトに関わる設定を定義
server { listen 80; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $hostname; proxy_set_header X-Real-IP $remote_addr; proxy_http_version 1.1; proxy_connect_timeout 5s; proxy_read_timeout 5s; proxy_send_timeout 5s; location / { ... } }
リバプロ用のログ設定を実施
- リバプロ用のログ定義を作成
- 利用できる変数は、以下を参照
- Module ngx_http_upstream_module - Embedded Variables
log_format upstream '$remote_addr - $remote_user [$time_local] "$request" ' '$upstream_cache_status $upstream_status ' '$upstream_addr $upstream_http_location ' '$host $proxy_add_x_forwarded_for'; access_log /var/log/nginx/upstream.log upstream;
実際のコンフィグ
/etc/nginx/nginx.conf
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"'; log_format upstream '$remote_addr - $remote_user [$time_local] "$request" ' '$upstream_cache_status $upstream_status ' '$upstream_addr $upstream_http_location ' '$host $proxy_add_x_forwarded_for'; access_log /var/log/nginx/access.log main; access_log /var/log/nginx/upstream.log upstream; server_tokens off; sendfile on; keepalive_timeout 65; upstream web-server { server 172.31.40.222; keepalive_timeout 30; } server { listen 80; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $hostname; proxy_set_header X-Real-IP $remote_addr; proxy_http_version 1.1; proxy_connect_timeout 5s; proxy_read_timeout 5s; proxy_send_timeout 5s; location / { proxy_pass http://web-server; } } }
ログたち
/var/log/nginx/access.log
223.xxx.xxx.xxx - - [21/Apr/2019:17:44:37 +0000] "GET / HTTP/1.1" 200 38 "-" "curl/7.55.1" "-" 223.xxx.xxx.xxx - - [21/Apr/2019:17:44:43 +0000] "GET / HTTP/1.1" 200 38 "-" "curl/7.55.1" "-"
/var/log/nginx/upstream.log
223.xxx.xxx.xxx - - [21/Apr/2019:17:44:37 +0000] "GET / HTTP/1.1" - 200 172.31.40.222:80 - kiritan.goodbyegangster.com 223.xxx.xxx.xxx 223.xxx.xxx.xxx - - [21/Apr/2019:17:44:43 +0000] "GET / HTTP/1.1" - 200 172.31.40.222:80 - zunchan.goodbyegangster.com 223.xxx.xxx.xxx