こんにちは。サイオステクノロジーの木村です。
サーバーのメンテナンス作業などを行う際に、サイトにアクセスしてきたユーザーに通常の画面を表示せずに「メンテナンス中画面」を表示する方法について記載します。
通常の画面表示とメンテナンス画面の表示を簡単に切り替えられるよう、maintenance.html というファイルが存在すればメンテナンス画面を表示し、すべてのアクセスに対して maintenance.html を返すようにします。
環境
Apache/2.4.62 (Rocky Linux)
手順
1. メンテナンス画面のHTMLファイルを maintenance.html.off
というファイル名で作成します。
・ maintenance.html.off
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>メンテナンス中</title>
<style>
body {
text-align: center;
}
</style>
</head>
<body>
<h1>ただいまメンテナンス中です。</h1>
<p>しばらくお待ちください。</p>
</body>
</html>
2. 作成したhtmlを、/var/www/html
(DocumentRoot)配下におきます。
3. /etc/httpd/conf.d/maintenance.conf
を作成し以下を記載します。
・ maintenance.conf
ErrorDocument 503 /maintenance.html
<IfModule mod_rewrite.c>
RewriteEngine On
## メンテナンス画面表示を除外したいIPアドレスがある場合はこちらに記載
RewriteCond %{REMOTE_ADDR} !=123.456.789.000
# メンテナンスページが存在する場合の処理
RewriteCond %{DOCUMENT_ROOT}/maintenance.html -f
RewriteCond %{REQUEST_URI} !^/maintenance\.html$
RewriteRule ^.*$ /maintenance.html [R=503,L]
</IfModule>
4. SSLでアクセスする場合は、/etc/httpd/conf.d/ssl.conf
に以下の記載を追加します。
・ ssl.conf
<VirtualHost _default_:443>
・・・(省略)・・・
Include conf.d/maintenance.conf
・・・(省略)・・・
</VirtualHost>
4. 上記設定を反映させるためリロードします。
systemctl reload httpd
以上で設定は完了です。
5. メンテナンス画面を表示したいときは、ファイル名をmaintenance.html
に変更します。
mv /var/www/html/maintenance.html.off /var/www/html/maintenance.html
6. メンテナンス画面の表示をやめたいときは、ファイル名をmaintenance.html.off
に戻します。
mv /var/www/html/maintenance.html /var/www/html/maintenance.html.off