当试图加载在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的(甚至是如此),但是我真的在猜测这个领域 – 我想这个问题的一些可能的原因是:
通过search下面的空间来尝试找出错误可能被迫发生的地方可能是有用的:
看看你能否可靠地重现问题。
您可以通过增加http_headers运行时选项来解决问题。 (如果你运行<2.1,我认为这是一个编译时或configuration时间选项)