cURL error 7连接拒绝求助:请求时而成功时而失败
问题排查与解决方案
先明确核心现象:
- cURL请求首次正常,刷新立即触发
cURL error 7: Failed to connect to <my.site> port 443: Connection refused,等待5分钟后恢复,重复刷新又会出错 - Postman发起请求始终正常
- 网络链路:域名→路由器→Nginx→page_vm
结合你的Nginx配置和问题特征,给出以下排查方向和解决方案:
1. 对比cURL与Postman的请求差异
用curl -v https://<my.site>打印详细请求日志,和Postman的请求头做对比,重点关注:
User-Agent:部分服务会针对不同UA做访问限制,Postman的默认UA和cURL不同Connection:Postman可能默认关闭长连接,而cURL默认启用HTTP/1.1的keep-alive,导致复用已失效的连接- 测试命令:
curl --no-keepalive https://<my.site>,如果问题消失,说明是长连接复用引发的异常
2. 调整Nginx代理的超时与连接配置
你的Nginx配置缺少关键的超时设置,且未明确长连接处理规则,在location /块中添加以下配置:
# 延长代理超时时间,避免短时间内连接被强制断开 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; # 强制关闭长连接,避免复用失效连接 proxy_set_header Connection "";
修改后重载Nginx配置:nginx -s reload,再测试cURL请求。
3. 排查路由器的NAT会话限制
家用路由器的NAT会话通常有超时时间和连接数限制,短时间内重复请求可能触发路由器的拦截机制:
- 进入路由器管理后台,找到端口转发规则,将TCP会话超时时间调整为120秒以上
- 检查是否有连接数限制选项,暂时关闭或调高限制值,测试是否解决问题
4. 检查后端page_vm的防火墙/安全策略
page_vm可能启用了fail2ban、iptables等安全工具,短时间内同一IP的频繁请求会被临时拉黑(通常5分钟自动解封):
- 查看page_vm的iptables规则:
iptables -L -n,确认是否有针对路由器IP的拦截条目 - 检查fail2ban日志:
tail -f /var/log/fail2ban.log,看是否是cURL请求触发了封禁规则 - 若存在封禁,可调整安全工具的阈值,或者将路由器IP加入白名单
5. 调整Nginx的全局连接数配置
检查nginx.conf的events块,确保worker_connections足够支撑并发:
events { worker_connections 2048; # 默认1024,若请求量较大可适当调高 use epoll; # 启用Linux系统下高效的事件驱动模型 }
重载Nginx配置后重新测试。
内容的提问来源于stack exchange,提问作者Arogant
相关产品推荐
相关产品推荐

