Apache httpd でメンテナンスモード
設定した内容を忘れないようにメモ。
実現したいこと
ドキュメントルートに maintenance.html というファイルが存在すれば、メンテナンスモードとし、すべてのアクセスに対して maintenance.html を返す。
ただし、特定の IP アドレスからのアクセスに関しては、通常通りのレスポンスを返す。
準備
1. DOCUMENT_ROOT/maintenance.htmlを配置。画像等は使わず、1つの HTML ファイルで完結するようにする(と設定が楽)
2. /etc/httpd/conf.d/rewrite_maintenance.conf を配置。
# rewrite_maintenance.conf ErrorDocument 503 /maintenance.html <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{DOCUMENT_ROOT}/maintenance.html -f RewriteCond %{REQUEST_URI} !=/maintenance.html RewriteCond %{REMOTE_ADDR} !=127.0.0.1 RewriteCond %{REMOTE_ADDR} !=xxx.xxx.xxx.xxx RewriteRule ^.*$ - [R=503,L] </IfModule>
xxx.xxx.xxx.xxx にはメンテナンスモードから除外したい IP アドレスを指定する。
3. SSL でアクセスする場合は、/etc/httpd/conf.d/ssl.conf も編集しておく。
# ssl.conf <VirtualHost _default_:443> ## snip ## Include conf.d/rewrite_maintenance.conf ## snip ## </VirtualHost>
4. maintenance.html を maintenance.html.rename_me 等にリネームしておく。
$ mv /var/www/html/maintenance.html /var/www/html/maintenance.html.rename_me
$ service httpd reload
メンテナンス時
maintenance.html のファイル名を切り替えるだけ。Apache httpd のリロードは不要。
メンテナンスモード ON
$ mv /var/www/html/maintenance.html.rename_me /var/www/html/maintenance.html
メンテナンスモード OFF
$ mv /var/www/html/maintenance.html /var/www/html/maintenance.html.rename_me
まとめ
ファイルのリネームだけでメンテナンスモードに入れるので、自動化も簡単ですね。