nginx の HttpGeoModule を使って、特定 ip からのアクセス以外は 503 を返すのを簡潔に書く
特定の ip からのアクセス以外は 503 を返す例です。
nginxで特定ホスト以外からのアクセスをメンテナンス画面にする方法 (2) - (ひ)メモ を参考にさせていただきました。
ありがとうございます。
以下が設定です。
geo $geo { default 1; 127.0.0.1 0; } server { listen 80 default_server; server_name _; location / { set $maintenance $geo; if ($maintenance) { return 503 "Service Unavailable"; } return 200 "OK"; } }
この状態で、127.0.0.1 以外から http request を送ると、
Service Unavailable を返します。
巷でよく見かける、ファイルがあるときだけ 503 にしたい場合は、
set $maintenance $geo;
を
if ( -f /path/to/file ) { set $maintenance $geo; }
とすれば ok です。
許可する ip を増やしたい場合は、
geo $geo { default 1; 127.0.0.1 0; 192.168.0.0/16 0; ... 0; }
のように書けば良いです。
geo $VAR {} の説明をしておくと、
geo $VAR { REMOTE_ADDR VALUE; ... }
という意味になっています。
REMOTE_ADDR に match した ip からアクセスがあると、$VAR には対応した VALUE が入ります。
したがって、
geo $geo { 192.168.0.0/16 100; }
と設定している状態で、
192.168.0.1 から http request を送ったとすると、
$geo == 100 となります。