我在 Drupal 网站上通过 Apache 运行 Varnish。我有一个 PHP 脚本,它在网站的某个路径上执行,需要很长时间……比如 60 - 120 秒。尝试访问该页面时,Varnish 总是在 60 秒后给我 503 guru 冥想超时。
我尝试将 Varnish connect_timeout 设置为一个非常高的值...我尝试将 Apache 的 php.ini 中的所有超时设置为一个非常高的值......但没有成功:Varnish 在 60 秒后一直给我 503 错误。
所以我的问题是:这个 60 秒超时值从何而来?我正在拔掉我的头发……
(仅供参考:如果我将 Varnish 排除在外,Apache 会在 60 - 120 秒后按预期提供页面,这让我认为超时一定是在 Varnish 的某个地方...)。
答案1
当我的服务器负载不大时,我遇到了 503 错误。我尝试通过增加 vcl conf 中的超时来避免该问题
first_byte_timeout = 300s; (默认设置为 60 秒)<- 这个可能可以回答你的问题(或者不能):)
请检查一下
http://vincentfretin.ecreall.com/articles/varnish-guru-meditation-on-timeout
希望这个有帮助
答案2
Error 503 Backend fetch failed
Backend fetch failed
要解决此问题,请增加 Varnish 配置文件中 http_resp_hdr_len 参数的默认值。http_resp_hdr_len 参数指定总默认响应大小 32768 字节内的最大标头长度。
如果 http_resp_hdr_len 值超过 32768 字节,您还必须使用 http_resp_size 参数增加默认响应大小。以具有 root 权限的用户身份在文本编辑器中打开 Vanish 配置文件:
CentOS 6: /etc/sysconfig/varnish
CentOS 7: /etc/varnish/varnish.params
Ubuntu: /etc/default/varnish
搜索 http_resp_hdr_len 参数。如果该参数不存在,请将其添加到 thread_pool_max 之后。将 http_resp_hdr_len 设置为您最大类别的产品数量乘以 21 的值。(每个产品标签的长度约为 21 个字符。)
例如,如果最大的类别有 3,000 种产品,则将值设置为 65536 字节应该有效:
-p http_resp_hdr_len=65536 \
将 http_resp_size 设置为适应增加的响应头长度的值。
例如,使用增加的标头长度和默认响应大小的总和是一个很好的起点(例如,65536 + 32768 = 98304):
-p http_resp_size=98304 \
片段如下:
# DAEMON_OPTS is used by the init script.
DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
-f ${VARNISH_VCL_CONF} \
-T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
-p thread_pool_min=${VARNISH_MIN_THREADS} \
-p thread_pool_max=${VARNISH_MAX_THREADS} \
-p http_resp_hdr_len=65536 \
-p http_resp_size=98304 \
-S ${VARNISH_SECRET_FILE} \
-s ${VARNISH_STORAGE}"