tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

特定のIP(範囲指定?)のみ許可RewriteCond。モバゲーとかはプロキシ経由元で判別

サービスの本番化のとき、メンテページを表示しつつ
自分たちだけデバッグしたい的なときありますよね。

そんなときの、
社内からのアクセスだけ許可してデバッグ
それ以外のアクセスはメンテページって感じのときのメモ

条件

  • 社内からの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がモバゲーになってしまったりとあるので
プロキシの経由元も見る必要があります

対応

今回はapachehttpd.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になります