Nginx 性能调优指南:从连接数到缓存的那些坑
Nginx 的默认配置对于个人小博客来说绰绰有余,但一旦你的网站流量开始增长,如果不做调优,服务器很容易在并发高峰期出现 502 Bad Gateway。
今天翻看之前的运维笔记,整理了几个 Nginx 在生产环境中必须调整的关键参数。
1. 榨干 CPU:Worker 进程优化
Nginx 是基于事件驱动和异步非阻塞架构的。默认配置下,worker_processes 通常是 1。这完全浪费了现在的多核服务器。
打开你的 nginx.conf,将这个参数设置为 auto,让 Nginx 自动匹配 CPU 核心数:
1 | worker_processes auto; |
2. 突破连接数瓶颈
很多人发现网站卡顿,查了 CPU 和内存都没跑满,最后发现是连接数超了。在 events 块中,我们需要调整最大连接数,并开启 epoll 模式(Linux 环境下必开)。
1 | events { |
重要:调整这个参数的同时,记得去 Linux 系统层面修改 ulimit -n:
1 | # 在 /etc/security/limits.conf 添加 |
3. 开启 Gzip 压缩
现在的云服务器,带宽通常比 CPU 更昂贵。开启 Gzip 可以大幅压缩 HTML、CSS、JS 的体积,加快前端加载速度。
1 | http { |
如果你的用户主要使用现代浏览器,强烈建议同时开启 Brotli 压缩(需要额外安装 ngx_brotli 模块),压缩率比 Gzip 高 15-25%。
4. Buffer 缓冲区调优
当 Nginx 作为反向代理时,如果后端响应体积较大而 Buffer 配置太小,会导致临时文件频繁写入磁盘(I/O 瓶颈)。根据你的内存情况,合理增大 Buffer:
1 | http { |
5. Keepalive 长连接
HTTP 请求默认是短连接——每次请求完成后连接即断开。频繁的 TCP 握手是非常昂贵的。开启 Keepalive 可以极大减少延迟:
1 | http { |
6. 开启反向代理缓存
如果你的博客是动态生成页面,每次请求都要查询数据库、渲染模板,压力很大。Nginx 的反向代理缓存可以将动态页面缓存到本地磁盘或内存中,后续请求直接返回缓存:
1 | http { |
7. 开启 HTTP/2
HTTP/2 支持多路复用、头部压缩和服务端推送,能显著提升页面加载速度。前提是必须开启 HTTPS:
1 | server { |
验证是否生效:curl -I --http2 https://yourdomain.com
踩坑总结
调优永远没有标准答案,所有的参数都要根据你的实际业务模型(IO 密集型还是计算密集型)来微调。建议每次修改配置后,都用 ab 或 wrk 命令压测一下,用数据说话:
1 | # ab 压测 |
调优的目的不是盲目追求高参数,而是让每一分硬件资源都用到刀刃上。
