web-dev-qa-db-ja.com

1つの書き換えルールを使用して複数のApache VHostサイトを「メンテナンスモード」に配置する

私たちの組織の数十の仮想ホストサイトを処理するために、Apache2.2 Webサーバーをセットアップしています。すべてのサイト要求を単一の「サーバーメンテナンスモード」ページ(404ファイルが見つかりませんメッセージではなく)にリダイレクトすることにより、すべてのサイトを一時的に「オフ」にする簡単な方法を探しています。 Apache2.confファイルでmod_rewriteルールを使用してこれを行う方法はありますか?これにより、すべてのサイトに影響するサーバーで変更を行うときに、これらすべてのサイトを「タッチ」して個別にオフにする必要がなくなります。

サーバーのセットアップと構造:
Apache2.confファイルでは、プライマリWebサイトがセクションで宣言されています

<VirtualHost *:80>  
ServerName mainsite.org  
DocumentRoot /var/www/main_site   

サーバー上の他のすべてのサイトはサブドメイン(abc.mainsite.org、news.mainsite.orgなど)であり、/ sites-available /に設定された標準のvhostファイルを使用し、/ sites-enabled /にシンボリックリンクを設定します。これらは、VirtualHost宣言に続くApache2.confの行によってアクティブ化/呼び出されます

Include /etc/Apache2/sites-enabled/

Mainsite.orgでこれを行うには、次のセクションの書き換えルールのコメントを外します。
RewriteEngine on
RewriteBase /

#サイトリクエストを「メンテナンス」ページにリダイレクトする 
RewriteCond %{HTTP_Host} ^www\.mainsite\.org  [OR]  
RewriteCond %{HTTP_Host} ^mainsite\.org  
RewriteRule ^/?(.*)$ http://kubrick.fpgsm.org [R,L]   

[kubrickは、次のように「デフォルト」vhostファイルにも配置されるホストサーバー名です。]

ServerName kubrick.fpgsm.org  
DirectoryIndex index.html  
DocumentRoot /var/www   

[index.htmlには「メンテナンス」メッセージがあります。]

セクションの上に配置される単純な書き換えルールを配置しようとしましたが、これは機能しません。ですから、Apache2.confのディレクティブがどのように機能するか、Apache2.confのVirtualHostと後続のVHostファイルとの関係について、明らかに何かが欠けています。

RewriteCond %{HTTP_Host} ^([a-z]+)\.mainsite\.org  [NC]  
RewriteRule ^/?(.*)$ http://kubrick.fpgsm.org [R,L]  

そこに解決策/提案はありますか?ありがとう。

2
krausdogs

すべての仮想ホストをメンテナンスモードにする書き換えルールを設定する方法が見つかりませんでした。他の可能なアプローチは次のとおりです。


すべてのApache仮想ホストを無効にする方法 から、- Vinko Vrsalovic は、単一のコマンドを使用してすべての仮想ホストを無効にすることを提案します。

 find /etc/Apache2/sites-enabled/ -type l -exec rm -i "{}" \;

次に、単一の仮想ホストを作成し(/etc/Apache2/sites-available/maintenance.confにある場合があります)、Sudo a2ensite maintenanceを使用して有効にし、Apacheを再起動または再ロードする必要があります。メンテナンスが完了したら、a2ensiteコマンドを使用して、すべての仮想ホストを再度有効にすることができます。


メンテナンスのためにWebサーバーをシャットダウンするcoredump からの提案:

iptablesを使用して、httpポートのすべてのトラフィックをサーバー上の別のポートにリダイレクトします。ここで、セカンダリWebサーバー(lighttpdまたはnginx、または静的HTMLページを提供できる非常に小さなもの)を実行できます。ルールは次のとおりです。

iptables -t nat -A PREROUTING -p tcp -i ethX -d <server ip> –dport 80 -j DNAT –to <server ip>:<new port>

別のサーバー/ポートに完全にリダイレクトすることもできます。


Apache Serverの自動メンテナンスページDan からの提案:

カスタム設定ファイルを使用してApacheを起動するのは非常に簡単です。私のシステムでは:

httpd -f <config>

メンテナンスプレースホルダーとして非常に単純な構成であるシェルスクリプトと組み合わせて、これを定期的に使用します。スクリプトは、通常のApacheを停止し、これを開始します。

1