Nginx 高并发优化:从连接数到缓存机制的调优实践

作为一名长期与 Nginx 打交道的运维工程师,我深知在面对高并发场景时,默认配置往往难以满足性能需求。今天我将分享一套经过实战检验的 Nginx 优化方案,从基础连接数调整到高级缓存机制,带你全面提升服务器并发处理能力。
1. 连接数优化:突破并发处理瓶颈
记得第一次处理百万并发请求时,Nginx 频繁报出 “worker_connections are not enough” 错误。经过排查,我发现关键在于合理配置连接数相关参数。
首先调整 worker_processes 和 worker_connections:
# 查看 CPU 核心数
grep processor /proc/cpuinfo | wc -l
# 编辑 nginx.conf
worker_processes auto; # 自动设置为 CPU 核心数
events {
worker_connections 65536; # 每个 worker 进程最大连接数
use epoll; # 使用 epoll 事件模型
multi_accept on; # 同时接受多个新连接
}
这里有个坑需要注意:worker_connections 最大值受系统文件描述符限制,需要同步调整:
# 临时修改
ulimit -n 65536
# 永久生效,编辑 /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
2. 缓冲区优化:减少磁盘 I/O 压力
在一次电商大促中,我发现 Nginx 日志中频繁出现 buffer 相关错误。经过优化,性能提升了 30%。
http {
client_body_buffer_size 128k;
client_header_buffer_size 4k;
client_max_body_size 20m;
large_client_header_buffers 4 16k;
# 代理缓冲区设置
proxy_buffers 8 16k;
proxy_buffer_size 16k;
proxy_busy_buffers_size 24k;
}
实际测试中发现,对于大文件上传场景,适当增大 client_max_body_size 很重要,否则会返回 413 错误。
3. 缓存机制深度优化
缓存是提升并发能力的利器。我通过以下配置将动态内容的响应时间从 200ms 降低到 50ms:
# 代理缓存配置
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:100m
inactive=24h max_size=10g;
server {
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 12h;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating;
proxy_cache_lock on; # 缓存锁,避免缓存击穿
add_header X-Cache-Status $upstream_cache_status;
}
}
在实践中,通过 X-Cache-Status 头部可以清晰看到缓存命中情况,方便后续调优。
4. Gzip 压缩与静态资源优化
压缩传输内容能显著减少带宽消耗,这是我常用的配置:
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml;
gzip_vary on;
gzip_disable "MSIE [1-6].";
对于静态资源,建议设置长期缓存:
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
add_header Cache-Control "public, immutable";
}
5. 实战监控与调优验证
优化后一定要验证效果。我习惯使用以下命令监控 Nginx 状态:
# 查看活跃连接数
netstat -an | grep :80 | wc -l
# 使用 nginx status 模块
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
通过访问 /nginx_status 可以获取关键指标:活跃连接数、请求处理数等,为后续优化提供数据支撑。
经过这些优化,我们的电商网站在双十一期间成功支撑了每秒 3 万+ 的并发请求。记住,优化是一个持续的过程,需要根据实际业务场景不断调整。希望这些经验对你有帮助!


这个连接数优化的经验太实用了,正好遇到类似问题👍