发送慢页面时清除503

当试图加载在Web服务器上生成所需时间较长的页面时,Varnish会一直抛出503服务不可用。

在varnishlog中,我可以看到一个FetchError c http read error: 0错误,虽然我不太清楚这意味着什么。

我也尝试增加后端超时:

 backend default { .host = "xxxx"; .port = "80"; .connect_timeout = 600s; .first_byte_timeout = 600s; .between_bytes_timeout = 600s; } 

后端是一个Apache服务器。

所有其他网页都正常工作。

有任何想法吗?

错误信息表示(行号引用是指清漆2.1.3):

在获取头[bin / varnishd / cache_fetch.c:399]时,可以:

a)发生溢出[bin / varnishd / cache_httpconn.c:170]

要么

b)调用read()时发生错误[bin / varnishd / cache_httpconn.c:175]

最后的数字是errno的值,所以,因为它是0(没有错误),我会假设选项a)发生,因为read()不应该返回一个负数,没有设置errno。

使用以下代码[bin / varnishd / cache_httpconn.c:167]检测到溢出,返回否定结果:

 i = (htc->ws->r - htc->rxbuf.e) - 1; /* space for NUL */ 

htc->ws是一个struct ws [bin / varnishd / cache.h:126],它是一个“工作空间结构”r成员是该工作空间的保留长度。 htc->rxbuf引用一个struct txt [bin / varnishd / cache.h:109],但是没有评论描述成员(b&e)引用的内容。 也许开始和结束?

我不知道工作区是如何resize的(甚至是如此),但是我真的在猜测这个领域 – 我想这个问题的一些可能的原因是:

  • 非常多的标题
  • 非常长的标题
  • Varnish调整工作空间的一个错误(如果有的话)

通过search下面的空间来尝试找出错误可能被迫发生的地方可能是有用的:

  • 标题长度
  • 标题的数量

看看你能否可靠地重现问题。

您可以通过增加http_headers运行时选项来解决问题。 (如果你运行<2.1,我认为这是一个编译时或configuration时间选项)