メンテナンス中でも開発者であったり、メンテナンスしている側は動作にウェブサイトの画面にどんな影響があるのかみたいので、メンテナンスページ見えてほしくないですよね。
apache のサーバーの場合は、メンテナンスページを見えないようにすることができます。nginx でもできますが、今回はapache で実装進めていきたいと思います。
前提
-
apache のインストールが完了していること
(バージョンは問いません) apache2 よりhttpd でインストールしているほうが好ましいと思います。ディレクトリ構造が異なったと思います。 -
DocumentRoot ディレクトリを作成していること
(これも特に指定なしです) -
conf ファイルは /etc/httpd/conf.d/ 配下に作成しています
(httpd.conf で include してたら問題ないです)
virtualhost のconf に直接設定する場合
example.com.conf に設定します。
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/test-example/public_html
ErrorLog logs/example.com-error_log
CustomLog logs/example.com-access_log common
ErrorDocument 503 /maintenance.html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/maintenance.html
RewriteCond %{REMOTE_ADDR} !=<your_ip>
RewriteRule ^.*$ - [R=503,L]
</IfModule>
</VirtualHost>
この場合は、同じconf 内に記述しているので、conf をいちいち横断する必要がなくなります。ただ、少しconf を複雑にしてしまいかねないので、その辺りは注意です。
メンテナンス設定解説
メンテナンスの設定は、この部分です。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/maintenance.html
RewriteCond %{REMOTE_ADDR} !=<your_ip>
RewriteRule ^.*$ - [R=503,L]
</IfModule>
ロジック自体はシンプルです。
Rewrite engine をオンにします、つまりリダイレクトを発生させるように設定します。そして、Rewritecond (= 条件分岐)の条件に当てはまらなかったら、503 にしてください!という記述です。
つまり、
① RewriteEngine on => リダイレクトする準備できたよ~~
↓
② maintenance.html 以外にアクセス来た、かつ 自分の指定したIP ではなかったら、
全部のアクセスを503 とするよ~~~
↓
③ おっ、503 きたから、ErrorDocument で指定したページを返そう
という流れですね。
RewriteCond はデフォルトで「かつ(&)」だったと思いますが、間違いがあれば、すいません。
conf ファイルをわける場合
先ほどと同じように設定します。今回はファイルを分割する方法で設定してみました。
#example.com.conf の中身
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/test-example/public_html
Include conf.d/mainte.conf
ErrorLog logs/example.com-error_log
CustomLog logs/example.com-access_log common
ErrorDocument 503 /maintenance.html
</VirtualHost>
# mainte.conf の中身
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# rewrite_maintenance.conf
ErrorDocument 503 /maintenance.html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/maintenance.html -f
RewriteCond %{REQUEST_URI} !=/maintenance.html
RewriteCond %{REMOTE_ADDR} !=127.0.0.1
RewriteCond %{REMOTE_ADDR} !=<your_ip>
RewriteRule ^.*$ - [R=503,L]
</IfModule>
今回の設定のメリットとしては、conf を汚さないことですね。もし何か上手くいかない設定があった場合でもファイルを分けているので、分離できている部分では少し安心ですね。Include をVirtualhost のディレクティブで指定するだけで呼び出すことが可能です。
設定ができたら、apache をreload してあげて、設定が完了です。
メンテナンスページが表示されなければ、成功です!!されたら、失敗です。
どこか設定が間違っている可能性ありです。
まとめ
メンテナンス時に、メンテ用の設定ができるので、ぜひ使ってみてください。
参考URL