varnish - 如何解决 Varnish FetchError“重用后端连接超时”
问题描述
我经常看到 Varnish FetchError “重用后端连接超时”的错误。检查了几个博客,但没有找到任何解决方案。能否请你帮忙?
- BereqHeader 接受编码:gzip
- BereqHeader X-清漆:37849780
- VCL_call BACKEND_FETCH
- VCL_return 获取
- 后端打开 36 NODEJS_2 xx.xx.xx.xx 9000 yy.yy.yy.yy 43309
- 时间戳 Bereq:1605444526.456709 0.000102 0.000102
- FetchError 超时重用后端连接
- 后端关闭 36 NODEJS_2
- 时间戳Beresp:1605444571.456893 45.000285 45.000183
- 时间戳错误:1605444571.456900 45.000292 0.000006
- Beresp 协议 HTTP/1.1
- Beresp状态 503
- BerespReason 后端提取失败
- BerespHeader 日期:2020 年 11 月 15 日星期日 12:49:31 GMT
- BerespHeader 服务器:清漆
- VCL_call BACKEND_ERROR
- BerespHeader 内容类型:text/html;字符集=utf-8
- BerespHeader 重试后:5
- VCL_return 交付
- 存储 malloc 瞬态
- 长度 285
- BereqAcct 2940 185 3125 0 0 0
- 结尾
解决方案
VSL输出中的Timestamp Beresp: 1605444571.456893 45.000285 45.000183
标记表明您的后端需要 几秒钟来生成响应,这触发了.45.000183
first_byte_timeout
实际上,您的后端可能需要超过 45 秒才能生成输出,但Varnish在超时后就放弃了。
以下是您的选择:
- 将
first_byte_timeout
运行时参数增加到更好的数字 - 检查为什么你的后端需要这么长时间
尽管选项 1 在理论上是可行的,但您真的想选择选项 2,并弄清楚为什么后端需要这么长时间才能响应。
推荐阅读
- vb.net - 如果我在访问文件中添加数据,但当通过应用程序输入数据时,我的表工作正常
- c++ - 如何选择用于 GitHub Actions 作业的 C/C++ 编译器?
- database - 是否可以将空手道自动化测试扩展到多个从属 VM 或 Kubernetes 集群?
- filesystems - Mac OS Mojave:“您的磁盘几乎已满”消息 - “系统”占用大量空间
- kubernetes - Kube 代理 - 将不会使用 IPVS 代理,因为未加载以下必需的内核模块:[ip_vs_wrr ip_vs_sh]
- maven - Maven依赖版本,使用一个版本或另一个
- php - 除法总是除以 1 而不是 var (float)
- asp.net - 我希望下拉列表的第一个元素为空
- c# - 使用 Microsoft 消息队列的 Receive() 方法出现问题
- python - 自动生成 Click 命令的所有帮助文档