proxy_connect_timeout 控制 Nginx 与后端建立 TCP 连接的最长等待时间,仅作用于握手阶段,单位为秒(支持一位小数),默认60秒,可在http/server/location块中配置,影响proxy_pass等代理指令及upstream故障转移。

proxy_connect_timeout 用于控制 Nginx 与后端服务器(如上游应用服务)建立 TCP 连接的最长等待时间,不是请求处理或数据传输超时。它只影响“握手阶段”——即从 Nginx 发起 connect() 系统调用开始,到成功建立 TCP 连接为止的时间限制。
作用范围和生效位置
该指令只能在 http、server 或 location 块中使用,且仅对 proxy_pass、fastcgi_pass、scgi_pass、uwsgi_pass 等代理指令生效。它不适用于静态文件响应或直接返回的场景。
- 若在
http块设置,作为全局默认值,可被下级块覆盖 - 若在
location中设置,仅对该 location 下的proxy_pass请求生效 - 值单位为秒(支持小数,如
3.5),默认是60秒
典型配置写法
在 location 或 upstream 上游组中设置更常见,便于按业务差异化控制:
upstream backend {
server 10.0.1.10:8080;
server 10.0.1.11:8080;
}
<p>server {
location /api/ {
proxy_pass <a href="https://www.php.cn/link/65b5b8d1f89bf53a5713bc3afdd83e9e">https://www.php.cn/link/65b5b8d1f89bf53a5713bc3afdd83e9e</a>;
proxy_connect_timeout 5s; # 连接后端最多等 5 秒
proxy_send_timeout 30s;
proxy_read_timeout 30s;
}
}</p>
注意:proxy_connect_timeout 不支持使用 ms 单位(如 500ms),只接受整数秒或带一位小数的秒(如 0.5、2.3)。
⚠️ 已弃用 — 该技能已拆分为两个独立技能,以提升模块化程度:**webchat-https-proxy**(HTTPS/WSS 反向代理)和 **webchat-voi...**
配合 upstream 的健康检查逻辑
当使用 upstream 时,proxy_connect_timeout 会影响失败判定和故障转移:
- 若连接某个 upstream server 超时,Nginx 会尝试下一个 server(前提是未禁用
proxy_next_upstream error) - 连续失败达到
max_fails次,且在fail_timeout时间内,该 server 会被标记为不可用 - 因此建议将
proxy_connect_timeout设得略小于fail_timeout,避免因单次超时就过早剔除节点
调试与验证方法
可通过日志确认是否触发了连接超时:
- 开启
error_log级别为info或更高,连接超时会记录类似:upstream timed out (110: Connection timed out) while connecting to upstream - 临时把后端服务停掉或防火墙拦截目标端口,观察 Nginx 是否在设定时间内报错并 fallback
- 用
tcpdump或strace -e trace=connect在 Nginx 进程上抓包,验证系统调用是否真在指定时间后返回ETIMEDOUT










