Apache設定で簡易的にメンテナンス画面に切り替えよう
メンテナンス画面の切り替えは、皆様どうしてますか?今回は業務で使っている簡易的にメンテナンス画面に切り替える方法を記載します。仕組みとしてはApache設定を施すことにより、フラグファイル(空ファイル)を所定の場所に作成することでメンテナンス画面に切り替えられるというもの。また、今回は特定のIPは除外(メンテナンス画面を表示させず通常画面のまま)する設定も入れていきます。スクリプトを実行する必要もないですし、メンテ解除もフラグファイルを削除するだけと、とても便利。
< 前提 >
・Apacheを使用
・メンテナンスページのコンテンツのパス: /var/www/html/sample.jp/common/error_maintenance.html
・下記 IP からのアクセスはメンテナンスページは表示されない: A.A.A.A、B.B.B.B
・フラグファイル名と配置場所: /opt/sample/conf/sample.maint.flag
< メンテナンス画面設定手順 >
1. Apache設定
Apacheのvhosts用の設定ファイルを以下のように設定する(VirtualHost部分切り出し)
<VirtualHost *:80> ServerName sample.jp ServerAlias www.sample.jp DocumentRoot /var/www/html/sample.jp ErrorLog /var/log/httpd/sample.jp-error_log CustomLog /var/log/httpd/sample.jp-access_log combined ErrorDocument 503 /common/error_maintenance.html RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.sample\.jp$ RewriteRule ^(.*) https://sample.jp$1 [R=301,L] RewriteCond /opt/sample/conf/sample.jp.maint.flag -f RewriteCond %{REMOTE_ADDR} !^A.A.A.A RewriteCond %{REMOTE_ADDR} !^B.B.B.B RewriteCond %{REQUEST_URI} !=/common/error_maintenance.html RewriteCond %{REQUEST_URI} !^.*\.(js|css|gif|jpg|png|ico)$ RewriteRule .* - [R=503,L] <Directory "/var/www/html/sample.jp"> AllowOverride All </Directory> </VirtualHost>
<< 解説 >>
▼ フラグファイル存在条件
RewriteCond /opt/sample/conf/sample.jp.maint.flag -f
▼ IP除外設定
RewriteCond %{REMOTE_ADDR} !^A.A.A.A RewriteCond %{REMOTE_ADDR} !^B.B.B.B
▼ 表示用メンテナンスページ設定
RewriteCond %{REQUEST_URI} !=/common/error_maintenance.html RewriteRule .* - [R=503,L]
2. Apache設定反映
# systemctl httpd.service reload
< メンテナンスページ表示手順 >
1. EC2にSSHログイン
2. メンテナンスフラグファイルを配置
$ sudo touch /opt/sample/conf/sample.maint.flag
3. 動作確認
サイトトップページ(https://www.sample.jp)にアクセスし、以下の挙動になることを確認
指定IPのアクセス: メンテナンスページが表示されないこと 指定IP以外のアクセス: メンテナンスページが表示されること
< メンテナンスページ解除手順 >
メンテナンスフラグファイルを削除
$ sudo rm -f /opt/sample/conf/sample.maint.flag
★参考サイト: