清漆触发503而不会超时

时间:2017-09-11 21:11:08

标签: apache varnish

免责声明:我们正在将一些服务器从Windows迁移到Linux,因此您将在此处看到一些不寻常的架构。

我的后端服务器之间有以下通信:

客户 - > Apache Httpd(解密SSL - 运行Windows Server) - >清漆缓存(转发代理和HTTP缓存 - 运行Ubuntu 16) - > Apache Tomcat(应用程序服务器 - 运行Windows服务器)。

我们有200个用户在高峰时段处于活动状态,并且每秒都会调用一次Ajax调用验证用户连接。

我们的客户不时会收到来自此Ajax请求的503(后端获取失败 - guru冥想)。我首先想到的是某种应用程序服务器减速,所以我按如下方式增加超时:

backend xxx {
    .host = "<%= $HOST_API %>";
    .port = "<%= $HOST_PORT %>";
    .first_byte_timeout = 1200s;
    .between_bytes_timeout = 1200s;
    .connect_timeout  = 10s;
}

但问题仍然存在。所以我研究了修改Apache Access Log来记录请求在后端花费的时间:

配置为:

LogFormat "%h %l %u %t \"%r\" %>s %b **%T/%D**" commomWithTime

所以时间将显示为* TIME_IN_SECONDS / TIME_IN_MILISECONDS *

当我收到503错误时,我会收到以下行:

200.201.175.53 - - [11/Sep/2017:17:16:06 -0300] "GET /sistema/verificarDesconexao?_=1505154046861 HTTP/1.1" 503 286 **0/0**

所以Apache告诉我Varnish瞬间返回503错误!在这种情况下,不可能是超时错误,对吧?

这里有一条带有503错误的Varnishlog消息(我不得不修改一些敏感部分):

*   << BeReq    >> 179699819
-   Begin          bereq 179699818 pass
-   Timestamp      Start: 1505161516.061772 0.000000 0.000000
-   BereqMethod    GET
-   BereqURL       /sistema/verificarDesconexao?_=1505153165280
-   BereqProtocol  HTTP/1.1
-   BereqHeader    Host: 10.1.1.135
-   BereqHeader    Accept: application/json, text/javascript, */*; q=0.01
-   BereqHeader    X-Requested-With: XMLHttpRequest
-   BereqHeader    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
-   BereqHeader    Content-Type: application/json;charset=ISO-8859-1
-   BereqHeader    Referer: https://www.sistema.com.br/sistema/
-   BereqHeader    Accept-Encoding: gzip, deflate, br
-   BereqHeader    Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4
-   BereqHeader    Cookie: JSESSIONID=0334D2460BD8E8AE9299E546AEB2838F; logo=Axis; idiomaSelecionado=pt_BR
-   BereqHeader    X-Forwarded-Host: www.sistema.com.br
-   BereqHeader    X-Forwarded-Server: www.sistema.com.br
-   BereqHeader    X-Forwarded-For: [IP], 10.1.1.177
-   BereqHeader    X-Varnish: 179699819
-   VCL_call       BACKEND_FETCH
-   VCL_return     fetch
-   FetchError     no backend connection
-   Timestamp      Beresp: 1505161516.062073 0.000301 0.000301
-   Timestamp      Error: 1505161516.062079 0.000307 0.000006
-   BerespProtocol HTTP/1.1
-   BerespStatus   503
-   BerespReason   Service Unavailable
-   BerespReason   Backend fetch failed
-   BerespHeader   Date: Mon, 11 Sep 2017 20:25:16 GMT
-   BerespHeader   Server: Varnish
-   VCL_call       BACKEND_ERROR
-   BerespHeader   Content-Type: text/html; charset=utf-8
-   BerespHeader   Retry-After: 5
-   VCL_return     deliver
-   Storage        malloc Transient
-   ObjProtocol    HTTP/1.1
-   ObjStatus      503
-   ObjReason      Backend fetch failed
-   ObjHeader      Date: Mon, 11 Sep 2017 20:25:16 GMT
-   ObjHeader      Server: Varnish
-   ObjHeader      Content-Type: text/html; charset=utf-8
-   ObjHeader      Retry-After: 5
-   Length         286
-   BereqAcct      0 0 0 0 0 0
-   End

还有哪些情况会发生Varnish 503错误,我应该如何识别并解决它?

1 个答案:

答案 0 :(得分:0)

似乎您的清漆无法到达或连接您的后端服务器,因为日志显示

FetchError no backend connection

你可以检查一下你可以从你的清漆中ping你的后端并启动一个http连接吗?