tsalakh ain sus noam Huyah ol guf

勉強会のメモ。その他備忘録。参考にさせて頂いたサイトや資料はリンクさせて頂いていますが不都合があればご連絡ください。

【技術メモ】設定ファイルを変えずにapacheをメンテナンスページに飛ばす


概要

やりたいこと

  • 本来のコンテンツにアクセスさせずに固定ページを出したい
  • つまるところ、tomcatに行かせたくない
  • 画像とかcssは出したい
  • 設定ファイルを書き換えてプロセス再起動、をせずにやりたい

確認バージョン

手順

mod_rewriteが有効になっていることが前提

  1. mod_rewirteの設定ファイルを作成
  2. httpdをリロード
  3. 制御ファイルを配置
  4. 制御ファイルを置換する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が効いているかの確認

基本事項

RewriteLogを出す

mod_rewriteのログを出すことができる。

  • VirtualHostで構成している場合はVirtualHostディレクィブ内に記載すること
  • 大量に出力されるので確認が終われば削除すること
### httpd.confに以下を記載
RewriteLog /var/log/httpd/rewrite.log
RewriteLogLevel 9

根本的に.htaccessが効いているかの確認

  1. 404のエラーページをgoogle などに設定
  2. 存在しないURLにアクセス
  3. 指定したURLへリダイレクトされるか確認する
### .htaccess に以下を記載
ErrorDocument 404 http://www.google.com/

そもそも.htaccessてなに?

.htaccess ファイル (「分散設定ファイル」) は ディレクトリ毎に設定を変更する方法を提供するもの

ただし、httpd.confのAllowOverride none だと使えない

最初に試したサーバではnoneになっているので、.htaccessが無くても有効になるはず。。

というか、conf.d配下はあくまでIncludeされるだけなので、扱いはhttpd.confと同じはず

conf.d配下に.confファイルを作るやつ

追加参考リンク

めも、原因はリライト後のhtmlのディレクトリの権限設定だった