Apache 時刻を指定したメンテナンス画面への切り替え+IPアドレス除外

技術情報
公開: 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のリライト/リダイレクトを行う条件を定義する