Top > 一時的にすべてのURLへのリクエストを''メンテナンス中''表示にする

キーワード: Apache mod_rewrite メンテナンス リダイレクト httpd.conf


手法を考える

  • サーバのシャットダウン/リブートを伴うメンテナンスの場合
    • DNSでAレコードをメンテナンス表示用サーバへ一時的に切り替える

  • Apacheの停止を伴うメンテナンスの場合
    • 同一ホスト内にメンテナンス用のApacheを別途インストールする

  • バックエンドのDBサーバ等, Apache以外のミドルウェアでメンテナンスを行う場合
    • mod_rewriteで外部のsorryサーバを表示させる
    • mod_rewriteでローカルのメンテナンスページを表示させる

DNSでAレコードをメンテナンス表示用サーバへ一時的に切り替える

TTL変更

メンテナンスの1週間より前に, DNSサーバでAレコードのTTLを600(10分) 程度に下げておく

メンテ用サーバ準備

メンテナンス中ページを表示させるsorryサーバを用意する. 設定はmod_rewriteでローカルの「メンテナンス」ページを表示させる と同様になる.

Aレコード変更

本番機→メンテ機にIPを変更する

メンテナンス実行

なんだかよくわからないメンテナンスを行う

Aレコード戻し, TTL戻し

変更したAレコードとTTLを元に戻す

同一ホスト内に「メンテナンス用のApache」を別途インストールする

メンテ用Apacheを構築する

# tar xfvz apache-1.3.xx.tar.gz
# cd apache-1.3.xx
# ./configure --enable-module=rewrite --prefix=/usr/local/apache-maint
# make
# make install

あとの設定はmod_rewriteでローカルの「メンテナンス」ページを表示させる と同様になる.
必要に応じてログ抑制, モジュールの軽量化を行った方が良いだろう.

メンテ開始

# /etc/init.d/httpd stop
# /usr/local/apache-maint/bin/apachectl start

メンテ終了

# /usr/locla/apache-maint/bin/apachectl stop
# /etc/init.d/httpd start

mod_rewriteで外部のsorryサーバを表示させる

メンテ用サーバ準備

メンテナンス中ページを表示させるsorryサーバを用意する. 設定はmod_rewriteでローカルの「メンテナンス」ページを表示させる と同様になる.

httpd.conf設定

RewriteEngine On
RewriteRule ^.*$ http://maint.princo.org/ [P]

PはProxyを意味する.
メンテ用サーバのレスポンスがgoogleにキャッシュされてしまうのを 防ぐため, bot除けのmetaタグを適切に記述する必要がある.

apacheをリスタートする

# /etc/init.d/httpd graceful

mod_rewriteでローカルの「メンテナンス」ページを表示させる

DocumentRootディレクトリにメンテナンスページを作成する.

# mkdir /var/www/html/maint/
# echo 'maint' > /var/www/html/maint/index.html

httpd.confでリライト設定をする

RewriteEngine On
RewriteCond %{REQUEST_URI} !^.*/maint/.*$
RewriteRule ^.*$ /maint/ [R=302]

R=302は, Apacheのレスポンスコード. 302は一時的な移動を意味する. (つまり, googleにcacheされない)

apacheをリスタートする

# /etc/init.d/httpd graceful



コメント

コメントはありません。 コメント/一時的にすべてのURLへのリクエストを''メンテナンス中''表示にする?

お名前: URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White


新規 編集 添付 名前変更 バックアップ   ホーム バックアップ リンク元   最終更新のRSS