Apache 時刻を指定したメンテナンス画面への切り替え+IPアドレス除外
Tech Knowledge
公開: 2023-12-11
概要
- 指定した時間にメンテナンス画面を表示するようにしたい(例:23 時から午前 5 時まで)
- 特定のグローバル IP アドレス(例: 123.123.123.123)からアクセスした場合はメンテナンス画面ではなく通常の画面を表示したい
- apache 2.4.x を使用
設定例
Alias /notice /var/hoge/publish/wwwroot/maintenance
<Directory "/var/hoge/publish/wwwroot/maintenance">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorDocument 503 /notice/Maintenance.html
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/notice/Maintenance.html
RewriteCond %{TIME_HOUR} <5 [OR]
RewriteCond %{TIME_HOUR} >=23
RewriteCond %{REMOTE_ADDR} !^123.123.123.123
RewriteRule ^.*$ - [R=503,L]
ProxyPreserveHost On
ProxyPass /notice !
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
Alias
- 仮想パス /notice を 実ディレクトリ /var/hoge/publish/wwwroot/maintenance に割り当て
Directory
- アクセス権の付与(これが無いと 403 Forbidden が表示される)
ErrorDocument ~ RewriteRule
- /notice/Maintenance.html を表示する
- /notice/Maintenance.html は転送対象から除外
- 5時より前 または 23時以降にメンテナンス画面を表示する
- IPアドレス 123.123.123.123 の場合は除外
- 全てのリクエストが対象
ProxyPass
- 仮想パス /notice は Proxy の対象外にする
proxy を使用してる場合は、proxyが優先されるので Alias だけはなくこちも設定が必要
変更の適用
httpd -t
systemctl reload httpd
参考
Apache設定で簡易的にメンテナンス画面に切り替えよう
Webサイトのメンテナンス中画面を出す正しい作法と.htaccessの書き方
Apache Aliasとproxyの優先順位
RewriteCondディレクティブ:URLのリライト/リダイレクトを行う条件を定義する