【问题标题】:How can I show a maintenance page when my FastCGI app is restarting?我的 FastCGI 应用程序重新启动时如何显示维护页面?
【发布时间】:2010-12-13 15:49:08
【问题描述】:

我正在使用独立的 FastCGI 服务器和 FastCgiExternalServer 指令在 Apache2 中为我的 FastCGI 应用程序提供服务。

当我重新启动我的 FastCGI 应用程序时,我的用户会收到 500 错误。我能做些什么来防止这种情况发生?我想向他们展示一个不错的“维护”页面或其他内容。

这是一个用 perl 编写的 Catalyst 应用程序,我按照示例 here 进行了操作,但我发现提供了 500 而不是 502 错误网关,因此我无法选择要显示的错误。我不想为合法的内部服务器错误提供维护页面。

【问题讨论】:

    标签: apache fastcgi mod-fastcgi


    【解决方案1】:

    你唯一真正的选择是

    1. 使用ErrorDocument 500 并设计适合任何一种情况的页面,或者
    2. 破解/修复 mod_fastcgi 以返回 502,而不是像民间智慧认为的那样返回 500。

    mod_fastcgi 开发速度很慢,但还没有完全死掉,所以你总是可以尝试将补丁发送到上游;如果它被接受,将不胜感激。 :)

    【讨论】:

    • 我也是这么想的。这可能会起作用,因为我认为我可以使用 Catalyst 来捕获应用程序错误并显示更合适的错误页面。
    【解决方案2】:

    谢谢霍布斯,

    我听取了您的建议并创建了一个补丁文件。这对我有用。我知道这是一个老问题,但它帮助了我,希望这对其他人有帮助。

    --- 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)))
         {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多