nginxの設定で詰まったのでメモ。
特定IPのみサイトアクセスを許可し、それ以外のIPには許可しない設定をここでは行う。
ELBを利用していない場合
remote_addrで接続元IPが取得できるので、それで判定する。
書き方例は以下
### Start - Show the maintenance page.
error_page 503 @maintenance;
location @maintenance {rewrite ^(.*)$ /maintenance.html break;}
set $flg "true";
if ($remote_addr = "127.0.0.1" ) {set $flg "false";}
if ($remote_addr ~ ^192\.168\. ) {set $flg "false";}
if ($remote_addr = "111.111.111.111" ) {set $flg "false";}
if ($request_uri ~ .*\.(jpg|txt|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO)){set $flg "false";}
if ($flg = "true") {return 503;}
### End - Show the maintenance page.
ELBを利用している場合
ELBを利用している場合は、
remote_addrはELBのIPが返ってくる。
http_x_forwarded_forが実際の接続元IPとなることに注意する。
書き方例は以下
### Start - Show the maintenance page.
error_page 503 @maintenance;
location @maintenance {rewrite ^(.*)$ /maintenance.html break;}
set $flg "true";
if ($remote_addr = "127.0.0.1" ) {set $flg "false";}
if ($remote_addr ~ ^192\.168\. ) {set $flg "false";}
if ($http_x_forwarded_for = "111.111.111.111" ) {set $flg "false";}
if ($request_uri ~ .*\.(jpg|txt|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO)){set $flg "false";}
if ($flg = "true") {return 503;}
### End - Show the maintenance page.