免责声明:我们正在将一些服务器从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错误,我应该如何识别并解决它?
答案 0 :(得分:0)
似乎您的清漆无法到达或连接您的后端服务器,因为日志显示
FetchError no backend connection
你可以检查一下你可以从你的清漆中ping你的后端并启动一个http连接吗?