Worker进程与连接数核心配置
Nginx高并发性能的第一道防线是Worker进程和连接数的正确配置。worker_processes指令控制Worker进程数量,设置为auto时Nginx自动检测CPU核心数并一一对应,这是大多数场景的最优选择。每个Worker进程通过worker_connections指令控制最大并发连接数,默认512,生产环境建议设置为4096到65535。理论上Nginx最大并发连接数等于worker_processes乘以worker_connections,一台8核服务器配置65535连接后理论上限超过50万并发。
# nginx.conf 核心配置
worker_processes auto;
worker_rlimit_nofile 100000;
events {
worker_connections 65535;
use epoll; # Linux使用epoll事件模型
multi_accept on; # 一次性接受所有新连接
accept_mutex off; # 高并发时关闭互斥锁减少争用
}
worker_rlimit_nofile设置Worker进程可打开的文件描述符上限,必须大于worker_connections,否则高并发时会报”too many open files”错误。同时需要确保系统级ulimit -n设置足够大,通常设为100000或更高。
Keepalive长连接与TCP内核参数调优
HTTP Keepalive连接复用能将请求延迟降低30%以上,因为省去了TCP三次握手开销。Nginx的keepalive_timeout默认75秒,生产环境建议设为30-60秒,过长的超时占用连接资源。keepalive_requests限制单个长连接上的最大请求数,设为10000可避免极少数连接被长期占用。对上游服务器同样需要配置keepalive连接池,upstream块中的keepalive指令指定与后端保持的空闲长连接数。
http {
keepalive_timeout 45s;
keepalive_requests 10000;
upstream backend {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
keepalive 64; # 与后端保持64个空闲长连接
}
server {
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
}
TCP内核参数调优同样关键。net.core.somaxnn控制全连接队列大小,net.ipv4.tcp_max_syn_backlog控制半连接队列大小,高并发场景两者都应设为65535。net.ipv4.tcp_tw_reuse设为1允许TIME_WAIT套接字复用,net.ipv4.tcp_fin_timeout缩短为15秒加快连接回收。net.ipv4.ip_local_port_range扩大可用端口号范围,从默认的32768-60999改为1024-65535。
# /etc/sysctl.conf 内核参数
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.ip_local_port_range = 1024 65535
net.core.netdev_max_backlog = 65535
Gzip压缩与静态资源传输优化
开启Gzip压缩能将文本响应体积压缩60%-80%,显著减少传输带宽和加载延迟。gzip_min_length设为1024字节以上才压缩,避免小文件压缩后反而更大。gzip_types覆盖常见MIME类型:text/css、application/javascript、application/json、application/xml、image/svg+xml。gzip_comp_level设为4-6性价比最高,级别9压缩比提升有限但CPU消耗翻倍。
http {
gzip on;
gzip_min_length 1024;
gzip_comp_level 5;
gzip_types text/plain text/css application/javascript
application/json application/xml image/svg+xml;
gzip_vary on;
gzip_proxied any;
# 静态资源缓存策略
location ~* \.(css|js|jpg|jpeg|png|gif|ico|woff2|svg)$ {
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
}
}
对于静态资源,配合Cache-Control的immutable指令能避免浏览器在资源未变时发起条件请求。Nginx的open_file_cache指令缓存文件描述符和元数据,减少磁盘IO开销,对高频访问的静态文件效果明显。
负载均衡与健康检查策略
Nginx提供四种负载均衡策略:轮询(Round Robin,默认)、最少连接(least_conn)、IP哈希(ip_hash)、一致性哈希(hash)。后端服务响应时间差异大时用least_conn,会话保持需求用ip_hash,缓存场景用一致性哈希。生产环境必须配置健康检查,Nginx开源版通过max_fails和fail_timeout实现被动健康检查,商业版Plus提供主动健康检查。
upstream api_cluster {
least_conn;
server 10.0.1.1:8080 max_fails=3 fail_timeout=30s;
server 10.0.1.2:8080 max_fails=3 fail_timeout=30s;
server 10.0.1.3:8080 max_fails=3 fail_timeout=30s backup;
# 慢启动,恢复后渐进增加流量
server 10.0.1.4:8080 max_fails=3 fail_timeout=30s slow_start=60s;
}
安全加固与速率限制
服务器安全加固是高并发配置的底线保障。隐藏Nginx版本号防止攻击者利用已知漏洞,限制HTTP方法只允许GET/POST/HEAD,配置请求体大小限制防止大文件上传攻击。速率限制(Rate Limiting)防止单IP暴力请求耗尽连接资源,limit_req_zone定义请求速率Zone,limit_req应用时burst参数允许短时突发流量,nodelay使突发请求立即处理而非排队。
http {
server_tokens off;
# 速率限制区域:按IP限制请求频率
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=100r/s;
limit_req_zone $binary_remote_addr zone=login_limit:10m rate=5r/m;
server {
# 通用API限流
location /api/ {
limit_req zone=api_limit burst=200 nodelay;
limit_req_status 429;
}
# 登录接口严格限流
location /login {
limit_req zone=login_limit burst=3 nodelay;
limit_req_status 429;
}
# 拒绝非法HTTP方法
if ($request_method !~ ^(GET|POST|HEAD)$ ) {
return 405;
}
client_max_body_size 10m;
}
}
高并发场景下Nginx配置没有万能模板,以上参数需要通过wrk或hey等压测工具逐步调优。观测QPS、P99延迟、错误率三项指标,每次只调整一个参数,记录变化趋势,才能找到特定业务场景的最优配置点。服务器性能调优是一个持续迭代的过程,配置只是起点,监控和反馈才是保障线上稳定运行的核心。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/nginx-gao-bing-fa-fu-wu-qi-xing-neng-diao-you-shi-zhan-lian/