4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Nginxでgeoモジュールを使ってメンテナンス中にIP制限をかける

Last updated at Posted at 2018-10-13

やりたいこと

  • メンテナンスモード時に一部のアクセスは許可(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>

関連

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?