我面临一个相当棘手的问题,在这种情况下,清漆似乎正在关闭后端连接,而没有等待来自后端的响应。
我们正在使用Nginx提供静态内容,以下是消息的顺序
Varnish将POST请求发送到App 应用程式传回500内部伺服器错误 Varnish解释500内部服务器错误(以显示静态错误页面) Varnish将GET请求发送到Nginx服务器(在同一服务器上)以提供静态内容 Varnish显示以下错误消息(即使Nginx在毫秒内成功发送了响应)
- VCL_call BACKEND_FETCH
- VCL_return fetch
- BackendOpen 38 boot.staticpages 127.0.0.1 82 127.0.0.1 35064
- BackendStart 127.0.0.1 82
- FetchError backend write error: 0 (Success)
- Timestamp Bereq: 1543420795.016075 5.106813 0.000099
- BackendClose 38 boot.staticpages
- Timestamp Beresp: 1543420795.016497 5.107235 0.000422
- Timestamp Error: 1543420795.016503 5.107241 0.000005
- BerespProtocol HTTP/1.1
- BerespStatus 503
- BerespReason Service Unavailable
- BerespReason Backend fetch failed
- BerespHeader Date: Wed, 28 Nov 2018 15:59:55 GMT
- BerespHeader Server: Varnish
- VCL_call BACKEND_ERROR
然后清漆再次进入同一Nginx服务器以显示默认内容。 Nginx发送响应,然后清漆接受并将其发送回客户
似乎后端连接很快关闭
在这方面的任何帮助都将受到赞赏
谢谢
答案 0 :(得分:0)
我们已解决了该问题,以下是问题的根源以及我们如何解决的摘要;
问题摘要: 当原始POST请求导致500内部错误并且backend_response用于获取自定义的静态页面500内部服务器错误消息时,Varnish显示后端获取错误
VarnishLog输出(仅相关消息): 可以看出,一旦发送请求,后端就会关闭。
- VCL_call BACKEND_FETCH
- VCL_return fetch
- BackendOpen 24 boot.staticpages 127.0.0.1 82 127.0.0.1 40696
- BackendStart 127.0.0.1 82
- FetchError backend write error: 0 (Success)
- Timestamp Bereq: 1543416195.877756 5.116981 0.000046
- BackendClose 24 boot.staticpages
- Timestamp Beresp: 1543416195.877888 5.117113 0.000132
- Timestamp Error: 1543416195.877892 5.117117 0.000004
- BerespProtocol HTTP/1.1
- BerespStatus 503
- BerespReason Service Unavailable
- BerespReason Backend fetch failed
- BerespHeader Date: Wed, 28 Nov 2018 14:43:15 GMT
- BerespHeader Server: Varnish
- VCL_call BACKEND_ERROR
根本原因: 清漆无法重试,因为不再有要发送的邮件。
解决方案: 通过使用std.cache_req_body(10KB)缓存原始请求的正文; https://varnish-cache.org/docs/trunk/reference/vmod_generated.html#func-cache-req-body