Apache でメンテナンス中画面を表示する

こんにちは。サイオステクノロジーの木村です。

サーバーのメンテナンス作業などを行う際に、サイトにアクセスしてきたユーザーに通常の画面を表示せずに「メンテナンス中画面」を表示する方法について記載します。
通常の画面表示とメンテナンス画面の表示を簡単に切り替えられるよう、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

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です