Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Nginx 高并发优化方案

下面是一份 真正能落地的《Nginx 高并发优化方案(生产级)》,不是空洞理论,是在高 QPS、海量连接时必须做的调优点。

⭐ 总体目标

让 Nginx 在高并发下:

  • 更少上下文切换
  • 更少连接阻塞
  • 更高吞吐量
  • 更低延迟
  • 更节省 CPU/内存

以下优化项全部经实战验证。

1. 进程数优化(worker_processes)

最佳实践:等于 CPU 核心数

worker_processes auto;

Nginx 每个 worker 单线程 + 事件驱动

  • 1 worker 对 1 核心效率最高。

2. 连接数优化(worker_connections)

默认 1024 远远不够,并发高时直接爆。

推荐 20k–50k(取决于 fd limit)

worker_rlimit_nofile 200000;

events {
    worker_connections 65535;
    use epoll;
    multi_accept on;
}

原理:

  • epoll:最佳事件模型(Linux)
  • multi_accept:一次接受多个连接,减少内核 wakeup 数量

3. TCP 内核调优(必须)

修改 /etc/sysctl.conf:

# TIME_WAIT 快速回收
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0  # 避免 NAT 设备问题
net.ipv4.tcp_fin_timeout = 15

# Backlog 队列更大(默认小)
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535

# 保持长连接性能
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_intvl = 20
net.ipv4.tcp_keepalive_probes = 3

# 端口复用
net.ipv4.ip_local_port_range = 1024 65535

应用:

sysctl -p

4. 开启 Nginx 自身性能优化

4.1 启用 sendfile(静态资源提升数倍)

sendfile on;
tcp_nopush on;
tcp_nodelay on;

4.2 启用 keepalive,减少 TCP 建连

上游 keepalive

upstream api {
    server 10.0.0.1:8000;
    server 10.0.0.2:8000;
    keepalive 128;
}

客户端 keepalive

keepalive_timeout 65;
keepalive_requests 10000;

5. 开启缓存(大幅减少上游压力)

适合静态资源、API、反代服务:

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:200m inactive=7d max_size=20g;

location / {
    proxy_cache mycache;
    proxy_cache_valid 200 1m;
}

高并发场景缓存是核心——减少后端吞吐 50%–90%。

6. 优化 buffer 与超时(防止阻塞 worker)

client_body_buffer_size  128k;
client_header_buffer_size 4k;
large_client_header_buffers 4 32k;
proxy_buffers 8 16k;
proxy_busy_buffers_size 64k;
proxy_buffering on;
send_timeout 30s;

避免:

  • request 头过大(攻击风险)
  • 代理阻塞
  • worker 卡住

7. 负载均衡策略优化

长连接服务:推荐 least_conn

upstream backend {
    least_conn;
    server 10.0.0.1:8000;
    server 10.0.0.2:8000;
}

无状态服务:推荐 round_robin(默认)

有 Session:推荐 ip_hash

8. 开启 HTTP/2(提升并发与性能)

listen 443 ssl;
http2 on;   # 你特别强调过,已正确配置

好处:

  • 一个 TCP 连接多路复用
  • 更少的并发连接数
  • 更低延迟

对静态网站和前端特别有效。

  1. 使用零拷贝 sendfile + gzip 并存优化

Nginx 默认 gzip 会禁用 sendfile

👉 最佳实践:

gzip on; gzip_static on;

gzip_static 直接返回 .gz 文件 -> 避免 CPU 压缩开销。

10. 日志优化(高并发会直接影响性能)

在高并发时,关闭 access_log 或用缓存写法:

access_log /var/log/nginx/access.log main buffer=512k flush=1s;

甚至禁用

access_log off;

11. 限制 CC / 洪水攻击(必须启用)

limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;

location /api/ {
    limit_req zone=req_limit burst=20 nodelay;
}

能直接拦截 80% 低成本攻击。

12. 使用更强加密算法(减少 CPU)

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
ssl_session_tickets on;

TLS 会消耗 CPU,session cache / ticket 能降低压力。

13. 多机部署的高可用架构

最佳架构:

  [ Keepalived / VIP ]
           |
   -----------------
   |               |
[Nginx #1]    [Nginx #2]
   |               |
   -----------------
          |
   [Backend cluster]

提供:

  • VIP 自动漂移
  • 前端无感切换
  • 后端高可用负载均衡