70001: Connection timed out本质是Linux内核因资源不足或参数不合理主动丢弃连接,需同步调优内核参数:增大SYN/全连接队列(tcp_max_syn_backlog、somaxconn)、启用tcp_tw_reuse、扩大端口范围、调整TIME_WAIT相关参数,并匹配Nginx backlog配置及ulimit限制。

出现 70001: Connection timed out 错误,本质不是 Nginx 自身报错,而是 Linux 内核在建立或维持 TCP 连接时因资源不足或参数不合理,主动丢弃连接或拒绝响应,最终由 Nginx 层面表现为“连接超时”。这类问题高频发生在万级并发、短连接密集(如 HTTP/1.1)、后端响应慢或网络抖动场景下,单靠修改 Nginx 的 timeout 指令无法根治——必须同步做内核级调优。
关键内核参数:解决连接建立失败
当大量客户端发起连接,但服务端来不及 accept,就会触发 “SYN 队列满” 或 “accept 队列满”,此时内核直接丢包,客户端收不到 SYN-ACK,重试后超时,Nginx 日志中常伴随 connect() failed (110: Connection timed out) 或 upstream 502/504。需重点调整:
- net.ipv4.tcp_max_syn_backlog = 65535:提升三次握手阶段的半连接队列容量(默认仅 1024),避免 SYN 洪水或突发建连压垮队列;
- net.core.somaxconn = 65535:增大全连接队列长度(默认 128),确保已完成三次握手的连接不被内核丢弃;
- net.core.netdev_max_backlog = 65535:提高网卡接收中断处理能力,防止高流量下数据包在驱动层堆积丢失;
- Nginx 配置需与之匹配:
listen 80 backlog=65535;(在 server 或 upstream listen 指令中显式设置)。
TIME_WAIT 连接积压:导致端口耗尽与新连接失败
HTTP 短连接频繁关闭后,主动关闭方进入 TIME_WAIT 状态(默认持续 60 秒),若并发高、连接快开快关,大量 socket 占用本地端口(net.ipv4.ip_local_port_range 默认仅约 28K 可用),新连接会因无可用端口而失败,表现就是 connect timeout。
- net.ipv4.tcp_tw_reuse = 1:允许复用处于 TIME_WAIT 的端口(需客户端 timestamp 开启,现代系统默认满足);
- net.ipv4.tcp_fin_timeout = 30:缩短 FIN_WAIT_2 超时时间,加快 socket 回收;
- net.ipv4.tcp_max_tw_buckets = 5000:限制最大 TIME_WAIT 数量,超出后强制回收,防端口池枯竭;
- net.ipv4.ip_local_port_range = "1024 65535":扩大本地端口范围,提供约 64K 可用端口(原默认约 28K)。
TCP 连接稳定性与快速恢复
网络波动或后端延迟时,若内核 TCP 参数过于保守,会导致重传激增、连接僵死,最终被上层判定为超时。以下参数可增强鲁棒性:
- net.ipv4.tcp_syncookies = 1:开启 SYN Cookies,当半连接队列溢出时仍能完成握手,避免拒绝合法请求;
- net.ipv4.tcp_slow_start_after_idle = 0:禁用空闲后慢启动,保持已建立连接的发送窗口不骤降;
- vm.swappiness = 10:降低内存交换倾向,防止 Nginx worker 进程被 swap 出内存,引发响应延迟甚至超时。
配套系统级准备不可少
内核参数只是基础,还需确保系统资源真正可达:
- 执行
ulimit -n 1000000并在/etc/security/limits.conf中持久化:nginx soft nofile 1000000、nginx hard nofile 1000000; - Nginx 配置中设置
worker_rlimit_nofile 1000000;,使 worker 进程能使用全部文件描述符; - 修改后务必运行
sysctl -p生效,并用sysctl -a | grep [参数名]核验值是否正确加载。











