サービスの本番化のとき、メンテページを表示しつつ
自分たちだけデバッグしたい的なときありますよね。
そんなときの、
社内からのアクセスだけ許可してデバッグ、
それ以外のアクセスはメンテページって感じのときのメモ
条件
- 社内からのIPアクセス以外はメンテ
- js、css、imgはOK (メンテページの画像とかも表示できなくなるので
- メンテページへのアクセスはOK
- プロキシ経由でのアクセスでもその経由元が社内ならOK
※js、css、imgは http://hogehoge.jp/js/hoge.js http://hogehoge.jp/css/hoge.css http://hogehoge.jp/img/hoge.img のようなアクセスだと仮定します
モバゲーなんかへサービスを出すときは
REMOTE_ADDRがモバゲーになってしまったりとあるので
プロキシの経由元も見る必要があります
対応
今回はapacheのhttpd.confでやってます
httpd.conf自体の書き方は省略します
RewriteEngine On RewriteCond %{REMOTE_ADDR} !^172.21. RewriteCond %{REMOTE_ADDR} !^xxx.xx.80.154$ RewriteCond %{HTTP:X-Forwarded-For} !^172.21. RewriteCond %{HTTP:X-Forwarded-For} !^xxx.xx.80.154$ RewriteCond %{REQUEST_URI} !^/html/maintenance.html$ RewriteCond %{REQUEST_URI} !^/(js|css|img)/(.*)$ RewriteRule .* /html/maintenance.html [R=301,L] ※xxx.xx.80.154のxは数字が入ります
説明
RewriteEngine On # 特定のIP以外をキャッチ RewriteCond %{REMOTE_ADDR} !^172.21. RewriteCond %{REMOTE_ADDR} !^xxx.xx.80.154$ # プロキシ経由元も特定のIP以外はキャッチ RewriteCond %{HTTP:X-Forwarded-For} !^172.21. RewriteCond %{HTTP:X-Forwarded-For} !^xxx.xx.80.154$ # リクエストがメンテページ以外もキャッチ RewriteCond %{REQUEST_URI} !^/html/maintenance.html$ # js、css、imgへのリクエスト以外もキャッチ RewriteCond %{REQUEST_URI} !^/(js|css|img)/(.*)$ # キャッチしたアクセスをすべてメンテページにリダイレクト RewriteRule .* /html/maintenance.html [R=301,L] ※xxx.xx.80.154のxは数字が入ります
- IPの範囲指定
- 最初変に考えこんで172.21.0.0/16とかやってましたw
- Rewrite変数(今回はREMOTE_ADDR)に対する文字列正規表現なので、途中で切っちゃえば(172.21.のように)そこまでの文字列matchになります
- HTTP:X-Forwarded-Forは最初書き方がわからなかったですが下記を参考にさせて頂きました!