Friday, January 4, 2013

Apache httpd + mod_rewrite で特定IPをメンテナンス対象外にする

Webサイト更新時にメンテナンスモードとする際、特定IPのみ対象外として動作確認したいケースがあります。

Webサーバに Apache httpd を利用している場合は、mod_rewrite だけで対応できます。以下の例では 192.168.56.101 以外のアクセスは 503 エラーで /maintenance.html を表示します。

ErrorDocument 503 /maintenance.html
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/maintenance.html$
RewriteCond %{REMOTE_ADDR} !^192\.168\.56\.101$
RewriteRule ^.*$ - [R=503,L]

ロードバランサ/リバースプロキシ経由等で X-Forwarded-For ヘッダ値が実際のIPアドレスの場合は

RewriteCond %{HTTP:X-FORWARDED-FOR} !^192\.168\.56\.101$

のように指定します。