必须同步调优Linux内核参数,否则Nginx高并发配置无效;需对齐文件描述符限制(fs.file-max、ulimit、limits.conf),调大somaxconn和tcp_tw_reuse,并启用tcp_fastopen、tcp_nodelay等TCP优化。

优化 Nginx 处理高并发连接,不能只改 nginx.conf,必须同步调优 Linux 内核参数。否则即使配置了 6 万连接,系统层面的限制会让连接直接被丢弃或卡在队列里。
调整文件描述符限制(最基础也最容易漏)
每个 TCP 连接、每个打开的文件、每个 socket 都占用一个文件描述符(file descriptor)。Nginx 的 worker_connections 和 worker_rlimit_nofile 必须与系统级限制对齐,否则无效。
- 查看当前限制:
ulimit -n(用户级)和cat /proc/sys/fs/file-max(系统级) - 临时提升(重启失效):
sudo sysctl -w fs.file-max=2097152 - 永久生效:在
/etc/sysctl.conf中添加fs.file-max = 2097152,然后运行sudo sysctl -p - 为 nginx 用户单独设限:在
/etc/security/limits.conf中添加nginx soft nofile 1048576nginx hard nofile 1048576
(注意:确保 nginx 以nginx用户身份启动,且 PAM limits 已启用)
优化网络连接队列与 TIME_WAIT 状态
高并发短连接场景下,大量连接快速建立又关闭,容易堆积在内核连接队列或陷入 TIME_WAIT,导致端口耗尽、新建连接失败。
- 增大监听队列长度(避免 accept queue 溢出):
net.core.somaxconn = 65535net.core.netdev_max_backlog = 5000 - 重用 TIME_WAIT 套接字(谨慎开启,仅适用于后端非 NAT 场景):
net.ipv4.tcp_tw_reuse = 1
(配合net.ipv4.tcp_timestamps = 1才生效) - 缩短 TIME_WAIT 超时(不推荐强行调低,优先用
tw_reuse):net.ipv4.tcp_fin_timeout = 30
提升 TCP 传输效率与稳定性
减少小包、降低延迟、加快数据送达,直接影响高并发下的响应时间和吞吐量。
- 禁用 Nagle 算法(适合 API、WebSocket 等低延迟场景):
net.ipv4.tcp_nodelay = 1 - 启用 TCP Fast Open(需客户端支持,可减少首次握手 RTT):
net.ipv4.tcp_fastopen = 3 - 增大 TCP 接收/发送缓冲区(自动调优已较成熟,但可放宽上限):
net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.ipv4.tcp_rmem = 4096 262144 16777216net.ipv4.tcp_wmem = 4096 262144 16777216
防止 SYN Flood 与连接泛洪攻击
生产环境必须防范恶意连接冲击,否则正常流量会被挤出队列。
- 启用 SYN Cookies(应对 SYN Flood):
net.ipv4.tcp_syncookies = 1 - 减小 SYN 队列超时,加快清理无效请求:
net.ipv4.tcp_synack_retries = 3net.ipv4.tcp_syn_retries = 3 - 限制单 IP 连接数(需配合 iptables 或 nftables):
例如:iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 100 -j REJECT











