外部スクリプトを呼び出さずにApacheで503ステータスを返すにはどうすればよいですか


26

メンテナンスのためにダウンしているサイトの1つから503ステータスコードを、昔ながらのSE_firendly方式で返す必要があります。外部スクリプトを呼び出さずにこれを行う方法を考え出すことはできませんが、避けたいと思います。

ステータスヘッダーを設定するphpスクリプトを呼び出すようなハッキングに頼らずに、任意のHTTPステータスコードを返すことができるApacheディレクティブはありますか?


2
私はないかなり確実でソートWebサーバが行うように設計されて正確に何のだ「ハック」...としてPHPファイルの分類を実行していることを...
マーク・ヘンダーソン

3
ふむ サーバー応答の単一行を設定するために、インタプリタ型スクリプト言語全体を呼び出すことは、ハッキングと見なされると思います。綿密な回避策なしで応答ヘッダーの行を設定することは、Webサーバーが行うように設計されたものに近いように思えます。
ダンマッキンレー09

回答:


32

これは、503ステータスとともにすべてのリクエストに静的な保留ページを提供します。

RedirectMatch 503 ^/(?!holding\.html)
ErrorDocument 503 /holding.html
Header always set Retry-After "18000"

RedirectMatchは、保持ページ自体を無効にするために使用されます。それ以外の場合は無限ループを作成します。

mod_headerを使用してRetry-Afterヘッダーを設定すると、この例では18000秒(5時間)後にバックアップする必要があることをGoogle /他のボットなどに伝えることができます。sudo ap2enmod headermod_headerをアクティブにすることができます(これはHeaderディレクティブに必要です)。


2
+1:サイドコメント:[RedirectMatch 503。*]と[Header always Retry-After "18000"]ルールのみを追加でき、デフォルトの503エラーメッセージで機能します。conf.d / localized-error-pagesファイルを確認して、言語ごとに異なるメッセージを設定します(ネゴシエーション、エイリアス、インクルードモジュールが必要)。
レペ

できます!私の個人的なWebサイトでは、を使用しますRedirectMatch 503 ^/(?!\.Error/.*|dragonlord-bg\.jpg)
bwDraco 14

7

試してみる

Redirect 503 / /

http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirectから:

ステータスの値として数値のステータスコードを指定すると、他のステータスコードを返すことができます。ステータスが300〜399の場合、URL引数が存在する必要があります。存在しない場合は省略されます。ステータスはApacheコードに認識されている必要があることに注意してください(http_protocol.cの関数send_error_responseを参照)。

追加の注:これにより、503エラーのデフォルト/設定済みErrorDocumentが表示されます。


どうもありがとう。mod_aliasは、私がその答えを見つけることを期待していた場所ではありませんが、仕事をするようです。
ダンマッキンレー09

ええ、リダイレクトは本当にあなたがしていることの正しい動詞ではありません:)
デイビッドパシュリー

リダイレクト503には、常に必須の1つの引数、URLパスがありません。一方、リダイレクトされたコードが300-399

1
「リダイレクトは2つまたは3つの引数、オプションのステータス、リダイレクトされるドキュメントおよびリンク先URLを取ります」というエラーが発生します。コンテキストでより完全な例を挙げてください。
トム

4
Redirect 503 /動作するようです。
mpartel 14

0

メンテナンスモードをより柔軟にするには、特別なファイルが存在する場合に503を設定します。ala:

RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/.maintenance -f
RewriteRule .* - [R=503]

注:DOCUMENT_ROOTの場所は、httpd 2.2と2.4で異なる場合があります

この方法で行う必要があるのは「touch /path/to/docroot/.maintenance」だけで、サイトはすぐに503を返し始めます。次に、すべてをきれいにするために、適切にフォーマットされたカスタムHTMLエラーページを作成し、これを正しいapacheサーバーの設定ファイルに追加します。

ProxyErrorOverride on
ErrorDocument 503 /error/503.html

また、ボーナスポイントの場合、複数のWebサーバーがある場合は、共有ファイルシステムで.maintenanceの場所を作成するか、さらにボーナスポイントを取得します。

pdsh -w $web1_ip,$web2_ip,$web3_ip "sudo touch /path/to/docroot/.maintenance"

メンテナンスモードファイルをベースにする利点は、アプリケーションが動作しなくても動作すること、迅速かつ簡単であること、すべてのバックエンド503を一気に処理できるため、フロントエンドキャッシングプロキシが処理しやすいことです。

ソース:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.