清漆后端处理

时间:2018-11-28 16:18:25

标签: nginx varnish

我面临一个相当棘手的问题,在这种情况下,清漆似乎正在关闭后端连接,而没有等待来自后端的响应。

我们正在使用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发送响应,然后清漆接受并将其发送回客户

似乎后端连接很快关闭

在这方面的任何帮助都将受到赞赏

谢谢

1 个答案:

答案 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