Custom Search

JITAKU_SVR_Wiki

どのサイトでもメンテナンスを行う場合はsorryページ等を用意すると思う。
※このWIKIは今まで無かったけど・・・。

sorryページを用意するにはいくつか方法がある。
①LBでsorryを表示させる
②.htaccessを使う
③apacheで切り替える

①についてはLBのアプライアンスであればほぼどこのメーカでも出来る?
そちらはあまり詳しくないので、割愛。

②は主にroot権限がないようなレンタルサーバであれば必然的にこれを使う必要が出てくる。
または、WEBサーバが複数台存在し、共有ストレージ上にDocumentRootがあるような場合だと、
すべてのapacheを設定し直すより便利で早い。

③はapacheのconfigをメンテナンス用に作成し、切り替えたいときにconfigを入れかえるというもの。
今回はこれを紹介。方法はmod_rewriteを使用。

環境

OS:CentOS release 6.3(64bit)
rpm:httpd-2.2.15-15.el6.centos.1.x86_64



sorryページの用意

これはどんなものでも良いと思う。
相手に伝わればOK。

まぁ、大きいサイトだとただのテキストだと格好悪いのでデザイナーさんが用意することもあるが、
ここにちょっと落とし穴があるので注意。後術。

まずは適当な場所でsorryページを用意しておく。

# vim maintenance.html

<html>
<head>
<title>
top jitaku-svr
</title>
</head> 

<body>
sorry, now maintenance.
</body>
</html>

非常にシンプル。これくらいならhtmlじゃなくてもいいだろうと思うくらいシンプル。

念のためapacheが見れるように権限を確認しておく。

# ls -la maintenance.html
(apacheにreadがあればOK)

httpd.confの用意

準備

apacheで使用するのは
・mod_rewrite
このmoduleが使えるか(インストールされているか)確認する。

確認方法

# httpd -M



rewrite_module (shared)

rewrite_moduleがあればOK。

次にhttpd.conf内でrewrite_moduleが呼び出されているかを確認する。

# grep LoadModule /etc/httpd/conf/httpd.conf | grep rewrite_module
LoadModule rewrite_module modules/mod_rewrite.so

上記のように出てきたらそのまま問題なく使える。

メンテナンス用configの設定

apacheの使い方は環境によってかなり変わってくると思う。
例えばnamebase、IPbase、これだけでもひとつのapacheにいくつものサイトがのっている可能性がある。

1サイトに1configを用意する人もいれば、1configにすべてのサイトを記述する人もいる。
パターンごとにいくつもあると書き切れないので、このwikiのWEBサーバでメンテナンス画面にさせる方法を記述。

このwikiはhttpd.confからpukiwiki.confをIncludeしている。
つまり、httpd.conf内には以下のように記述している。

# grep Include /etc/httpd/conf/httpd.conf
Include conf.d/*.conf
※serverrootは/etc/httpd

# ls /etc/httpd/conf.d/pukiwiki.conf
/etc/httpd/conf.d/pukiwiki.conf

上記の構成で、httpd.confを以下のように編集する。
まずはメンテナンス用ファイルを作成。

# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.maint

# vim /etc/httpd/conf/httpd.conf.maint (編集箇所)
Include conf.d/*.conf
     ↓

#Include conf.d/*.conf ← Includeをコメントアウト

Options None
     ↓
Options FollowSymLinks ← FollowSymLinksを追加

※DocumentRootのディレクティブに追加
RewriteEngine on
RewriteCond %{REQUEST_URI} !=/info/maintenance.html
RewriteRule .* /info/maintenance.html [R]

これでhttpd.confの修正が完了。

TIPS:
FollowSymLinksの追加について
いまだに良く分からないが、リダイレクトしようとすると、以下のエラーが出てうまくいかなかった。

Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden

正直、半信半疑で追加したところ問題なくリダイレクト出来たので、恐らくやっていることは間違いないのだと思うが…。
とりあえず、必要だ、ということらしい。

メンテナンス画面に切り替える

・作成したメンテナンスページの移動
上記で作成したmaintenance.htmlを適切な場所(DocumentRoot)においてあげる。

# mv maintenance.html /var/www/html/info/

現在のhttpd.confとメンテナンス用のconfigを入れ替える

# mv httpd.conf httpd.conf.bak

# mv httpd.conf.maint httpd.conf

# /etc/init.d/httpd restart
これですべてのサイトのどのページにアクセスされても必ずmaintenance.htmlを参照されることになる

sorryページの補足

手の込んだsorryページに落とし穴があると上のほうで書いたのでそれの補足。

例えば以下のようなファイル。

$baseDir        = dirname(dirname(dirname(__FILE__)));
$header         = "/info/head.html";
$footer         = "/info/foot.html";
$detail         = $baseDir."/info/info.html";
$title          ="メンテナンスのお知らせ";

こんな感じになっているphpとかのページは恐らくこのファイルだけリダイレクトしてもフォーマットが崩れると思う。

RewriteEngine on
RewriteCond %{REQUEST_URI} !=/info/maintenance.php
RewriteRule .* /info/maintenance.php [R]
これだけじゃダメ。
それぞれのページ(head.html,foot.html,info.html)それぞれをリダイレクトしてあげるように設定しないとほぼうまく表示はされないと思う。
補足なのでこれくらいで・・・。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-12-17 (木) 16:34:47 (644d)