1

スタンドアロンのFastCGIサーバーとFastCgiExternalServerディレクティブを使用して、Apache2でFastCGIアプリケーションを提供しています。

FastCGIアプリを再起動すると、ユーザーに500エラーが発生します。これを防ぐために何ができますか?素敵な「メンテナンス」ページか何かを見せたいです。

これはperlで記述されたCatalystアプリケーションであり、ここの例に従いましたが、500が提供され、502の不良ゲートウェイではないことがわかったため、表示するエラーを選択できません。正当な内部サーバーエラーのメンテナンスページを提供したくありません。

4

2 に答える 2

2

あなたの唯一の本当の選択は

  1. ErrorDocument 500どちらの状況にも適したページを使用してデザインする、または
  2. mod_fastcgiをハック/修正して、一般の知恵が考えているように500ではなく502を返します。

mod_fastcgiの開発は非常に遅いですが、完全に機能しているわけではないため、いつでもそのパッチをアップストリームに送信してみることができます。それが受け入れられれば、それはありがたいです。:)

于 2009-11-06T04:50:38.870 に答える
1

Hobbsに感謝します。

私はあなたのアドバイスを受けて、パッチファイルを作成しました。これは私のために働いています。私はこれが古い質問であることを知っています、しかしそれは私を助けました、うまくいけばこれは他の人を助けるでしょう。

--- mod_fastcgi-SNAP-0910052141/mod_fastcgi.c   2008-11-09 07:31:03.000000000 -0700
+++ mod_fastcgi-SNAP-BadGateway/mod_fastcgi.c   2012-06-01 10:42:48.497212761 -0600
@@ -1670,7 +1670,7 @@
                 if (open_connection_to_fs(fr) != FCGI_OK) 
                 {
                     ap_kill_timeout(r);
-                    return HTTP_INTERNAL_SERVER_ERROR;
+                    return HTTP_BAD_GATEWAY;
                 }

                 is_connected = 1;
@@ -2079,7 +2079,7 @@
                 if (open_connection_to_fs(fr) != FCGI_OK) 
                 {
                     ap_kill_timeout(r);
-                    return HTTP_INTERNAL_SERVER_ERROR;
+                    return HTTP_BAD_GATEWAY;
                 }

                 set_nonblocking(fr, TRUE);
@@ -2387,6 +2387,11 @@
     {
         sink_client_data(fr);
     }
+    
+    //if we failed to connect to FastCGI Server, return error now. Do not try to parse headers
+    if (rv == HTTP_BAD_GATEWAY) {
+       return rv;
+    }

     while (rv == 0 && (BufferLength(fr->serverInputBuffer) || BufferLength(fr->clientOutputBuffer)))
     {
于 2012-06-01T16:59:30.843 に答える