Varnish报Backend fetch failed(errno 0/13)问题求助
Varnish 6.6.2 503 Backend Fetch Failed 问题解决
1. 优先排查SELinux限制
AlmaLinux 9 默认启用 SELinux,这是导致Permission denied错误的最常见原因:
- 临时关闭 SELinux 验证:执行
setenforce 0,然后重新测试curl -I -H "Host: <domainname>" http://<server_ip>:80/,如果恢复正常,说明 SELinux 是问题根源。 - 永久配置 SELinux 规则:
- 将 Apache 监听的7080端口加入 SELinux 允许的 HTTP 端口列表:
semanage port -a -t http_port_t -p tcp 7080 - 允许 HTTP 服务发起网络连接:
setsebool -P httpd_can_network_connect 1 - 恢复 SELinux 强制模式:
setenforce 1
- 将 Apache 监听的7080端口加入 SELinux 允许的 HTTP 端口列表:
2. 验证Varnish后端配置
- 确认后端配置的IP和端口准确,避免使用占位符,直接填写Apache实际监听的IP(如127.0.0.1或服务器内网IP)和7080端口。
- 检查Varnish启动参数中的超时设置,若超时过短可能导致连接中断,可调整启动命令的
-t参数(如-t 300设置300秒超时)。 - 用
varnishadm backend.list查看后端状态,确认后端标记为healthy。
3. 检查防火墙规则
- 确保firewalld允许Varnish访问7080端口:
firewall-cmd --add-port=7080/tcp --permanent firewall-cmd --reload - 若Apache监听本地回环地址(127.0.0.1),确认防火墙未限制本地回环流量。
4. 验证Varnish运行用户权限
- 查看Varnish运行用户(默认是
varnish),切换到该用户测试连接Apache:
若出现权限拒绝,需检查该用户的SELinux上下文或用户组配置,确保其具备网络连接权限。su -s /bin/bash varnish curl -I -H "Host: <domainname>" http://<server_ip>:7080/
5. 处理errno 0 (Success)异常
该错误通常是连接被异常中断,可从以下方面调整:
- 检查Apache的KeepAlive配置,调整
KeepAliveTimeout和MaxKeepAliveRequests,避免过早关闭连接。 - 在VCL中增加后端连接超时配置:
加载并启用新VCL:backend default { .host = "<server_ip>"; .port = "7080"; .connect_timeout = 5s; .first_byte_timeout = 30s; .between_bytes_timeout = 10s; }varnishadm vcl.load new_backend /etc/varnish/default.vcl varnishadm vcl.use new_backend
内容的提问来源于stack exchange,提问作者Luco
相关产品推荐
相关产品推荐

