优化 Linux 下 Nginx 的性能,通常可以从系统层面、Nginx 配置层面、网络与内核参数、以及架构层面四个方向入手。下面给你一个比较系统、可落地的优化清单。
worker_processes auto; # 一般等于 CPU 核心数
worker_cpu_affinity auto; # 自动绑定 CPU
events {
use epoll; # Linux 下最佳
worker_connections 10240; # 单 worker 最大连接数
multi_accept on; # 一次性接受多个连接
}
http {
sendfile on;
tcp_nopush on; # 配合 sendfile
tcp_nodelay on; # 小包即时发送(动态内容)
}
keepalive_timeout 30s;
client_header_timeout 15s;
client_body_timeout 15s;
send_timeout 15s;
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml;
location ~* \.(jpg|css|js|png)$ {
expires 30d;
access_log off;
}
limit_req_zone $binary_remote_addr zone=req:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn:10m;
# /etc/security/limits.conf
* soft nofile 100000
* hard nofile 100000
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 600
执行:
sysctl -p
proxy_cache_path /data/cache levels=1:2 keys_zone=mycache:10m;
location / {
proxy_cache mycache;
proxy_pass http://backend;
}
listen 443 ssl http2;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols TLSv1.2 TLSv1.3;
ab -n 10000 -c 1000 http://localhost/
wrk -t8 -c1000 -d30s http://localhost/
ss -s)❌ 盲目调大 worker_connections
❌ 开启过多模块
❌ 忽略后端瓶颈(Nginx 再快也没用)
如果你愿意,可以告诉我:
我可以给你一套针对性配置模板。