代码之家  ›  专栏  ›  技术社区  ›  cubabit

当我的FastCGI应用程序重新启动时,如何显示维护页面?

  •  1
  • cubabit  · 技术社区  · 16 年前

    当我重新启动FastCGI应用程序时,我的用户会收到500个错误。我能做些什么来防止这种情况?我想给他们看一个漂亮的“维护”页面什么的。

    这是一个用perl编写的Catalyst应用程序,我遵循了这个示例 here 但我发现服务的是500而不是502坏网关,所以我无法选择要显示的错误。我不想为合法的内部服务器错误提供维护页面。

    2 回复  |  直到 16 年前
        1
  •  2
  •   hobbs    16 年前

    你唯一真正的选择是

    1. ErrorDocument 500 然后设计一个适合任何情况的页面,或者

    mod_fastcgi开发非常缓慢,但并不是完全死机,所以您可以尝试将该补丁发送到上游;如果接受,将不胜感激。:)

        2
  •  1
  •   DancerJeff    14 年前

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

    --- 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)))
         {
    
    推荐文章