【技術メモ】設定ファイルを変えずにapacheをメンテナンスページに飛ばす
概要
やりたいこと
確認バージョン
手順
mod_rewriteが有効になっていることが前提
- mod_rewirteの設定ファイルを作成
- httpdをリロード
- 制御ファイルを配置
- 制御ファイルを置換するplaybookを作成
手順詳細
mod_rewrite の設定ファイルを作成
$ sudo vi /etc/httpd/conf.d/rewrite_maintenance.conf ErrorDocument 503 /maintenance.html Alias /maintenance.html /var/www/error/maintenance.html RewriteEngine on RewriteCond /var/www/error/maintenance.on -f RewriteCond %{REQUEST_URI} !=/maintenance.html RewriteCond %{REQUEST_URI} !\.png$ RewriteCond %{REQUEST_URI} !\.gif$ RewriteCond %{REQUEST_URI} !\.css$ RewriteCond %{REQUEST_URI} !\.scss$ RewriteCond %{REQUEST_URI} !\.js$ RewriteCond %{REQUEST_URI} !\.jpg$ RewriteCond %{REQUEST_URI} !\.jpeg$ RewriteRule .* /anywhere [R=503]
- RewriteCond の -f オプションは、「指定したファイルが存在すればtrue」
- R=503は「サービス利用不可」「サービスが利用できません」
httpdをリロード
$ sudo service httpd reload
maintenance.on ファイルがないから、影響なし
制御ファイルを配置
$ sudo touch /var/www/error/maintenance.off
maintenance.on ファイルじゃないから、まだ影響なし
制御ファイルを置換するplaybookを作成
(TBC)
とりあえず↓で動確可能
$ sudo mv /var/www/error/maintenance.off /var/www/error/maintenance.on
参考リンク
link Apache httpd でメンテナンスモード
link ApacheサーバでRewriteしてメンテナンス画面を表示させる
link mod_rewriteリファレンス
link .htaccessのリダイレクトで、特定ディレクトリ・ページをリダイレクトさせない(除外する)方法
追記
他のサーバでやってみたらうまくいかなかった
.htaccessが効いているかの確認
基本事項
- .htaccess の改行コードは [LF] か
- .htaccessの最後に改行があるか
- .htaccess内に日本語コメントがないか、文字コードがUTF-8以外でないか
- .htaccessのパーミッションが「604」(推奨)または「644」か
RewriteLogを出す
mod_rewriteのログを出すことができる。
- VirtualHostで構成している場合はVirtualHostディレクィブ内に記載すること
- 大量に出力されるので確認が終われば削除すること
### httpd.confに以下を記載 RewriteLog /var/log/httpd/rewrite.log RewriteLogLevel 9
根本的に.htaccessが効いているかの確認
- 404のエラーページをgoogle などに設定
- 存在しないURLにアクセス
- 指定したURLへリダイレクトされるか確認する
### .htaccess に以下を記載 ErrorDocument 404 http://www.google.com/
そもそも.htaccessてなに?
.htaccess ファイル (「分散設定ファイル」) は ディレクトリ毎に設定を変更する方法を提供するもの
ただし、httpd.confのAllowOverride none だと使えない
最初に試したサーバではnoneになっているので、.htaccessが無くても有効になるはず。。
というか、conf.d配下はあくまでIncludeされるだけなので、扱いはhttpd.confと同じはず
conf.d配下に.confファイルを作るやつ
追加参考リンク
- link htaccessでRewriteEngine Onが効かないのはなぜですか?
- link Apacheのmod_rewriteモジュールの使い方を徹底的に解説
- link Apache チュートリアル: .htaccess ファイル
めも、原因はリライト後のhtmlのディレクトリの権限設定だった