Nginxでgeoモジュールを使ってメンテナンス中にIP制限をかける
やりたいこと
メンテナンスモード時に一部のアクセスは許可(200)し、それ以外はメンテナンス(503)を返すようにしたい
実現方法
Nginxのgeoモジュールを利用する
設定(geoモジュールを使う)
- Nginxドキュメント(geo)
$ nginx -V
でモジュールが利用できるか確認する--with-http_geoip_module
が出力されればok!許可するIPを指定する(今回はVPC内は許可にした)
- デフォルトは0 ( False )
- マッチしたら1 ( True )
geo $allow_ip { default 0; 10.0.0.0/16 1; }
$allow_ip
がtrue
だったら(許可リストに有)、通常モードにするfalse
だったら、(許可リストに無)、メンテナンスモードする
if ($allow_ip) { set $maintenance false; }
■ 検証で設定したconfファイルの全体
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name 10.0.1.113; error_page 503 @maintenance; recursive_error_pages on; if (-e /var/www/html/maintenance.html) { set $maintenance true; } if ($allow_ip) { set $maintenance false; } if ($maintenance = true) { return 503; } location / { try_files $uri $uri/ =404; } location @maintenance { expires 0; internal; if (-f $request_filename) { break; } error_page 405 = /maintenance.html; rewrite ^(.*)$ /maintenance.html break; } }
実行結果(vpc内から接続)
<!DOCTYPE html> <html> <title>Welcome to nginx!</title> <p><em>Thank you for using nginx.</em></p> </html>
実行結果(vpc外から接続)
<html> <p> This is Maintenance Page </p> </html>
関連
- Nginxでメンテナンスページの設定をする
- Nginxで静的ページにPostすると405で取得できない場合の対処