返回列表 发布新帖
查看: 15|回复: 0

Linux 实战:Nginx 高效部署全攻略与性能调优深度解析

988

主题

0

回帖

833

积分

高级会员

积分
833
发表于 2026-6-25 04:40:01 | 查看全部 |阅读模式
最近帮朋友的公司迁移服务器,顺便把 Nginx 的部署和调优整理了一遍,发现坑还真不少,尤其是那些"装完就跑"的配置,迟早要出问题。这里把经验分享一下,希望对还在摸索的兄弟们有点用。

先说部署。CentOS 或者 Ubuntu 上装 Nginx 都简单,包管理一行命令搞定,但我强烈建议不要用发行版默认仓库里的版本,那个版本往往滞后好几个大版本,缺少一些新特性。推荐去 Nginx 官方仓库添加源,或者干脆编译安装。编译安装的好处是可以按需加模块,比如你用不到 mail 模块,完全可以不编进去,二进制干净,后期维护也清楚。编译时记得带上 --with-http_ssl_module、--with-http_v2_module、--with-pcre 这几个,基本够用了。

装完之后,很多人直接就上线了,这里要提醒一下,默认的 nginx.conf 完全是给你看个格式的,根本不能拿来当生产用。worker_processes 要改成 auto,让 Nginx 自己探测 CPU 核数;worker_connections 默认 1024 太保守了,根据你服务器的 ulimit 值,改到 10240 甚至更高都没问题,前提是系统的文件描述符上限也要同步调整,/etc/security/limits.conf 里把 nofile 拉上去,不然白改。

关于性能优化,我觉得最容易被忽视的是 keepalive 相关的参数。keepalive_timeout 默认 75 秒,高并发场景下连接长时间占着不释放,反而是个负担,根据实际业务调到 30 秒甚至更短,效果明显。另外反向代理场景下,upstream 里面一定要配 keepalive,这个参数控制的是 Nginx 与后端服务之间的长连接复用数量,不加这个,每次请求都新建 TCP 连接,后端压力会莫名其妙偏高,很多人排查了半天找不到原因,其实就是这个。

静态资源这块,sendfile on、tcp_nopush on、tcp_nodelay on 这三行几乎是标配,不多解释。gzip 压缩要开,但 gzip_comp_level 别贪心,设到 4 或者 5 就够了,再高 CPU 消耗涨得厉害,压缩比提升却微乎其微。gzip_min_length 建议设 1k,太小的文件压缩了反而变大,别做无用功。图片、视频这类本身已经压缩过的格式就不要再走 gzip 了,types 里排除掉。

日志这块也要注意。默认 access_log 全量记录,流量大的时候磁盘 I/O 会成为瓶颈。可以考虑两个方案,一是对静态资源关掉 access_log,二是加上 buffer 参数,让日志先写内存再批量刷盘,类似 access_log /var/log/nginx/access.log main buffer=32k flush=5s,这个改动在高并发下效果非常明显。

最后说一个实际踩过的坑。Nginx 处理大文件上传的时候,client_max_body_size 要改,否则直接 413 报错,这个大家都知道。但 client_body_buffer_size 很多人忘了,默认 8k 或 16k,超过这个大小的请求体会被写到磁盘临时文件,频繁的磁盘读写在高并发上传场景下性能下降很厉害,适当调大这个值,让数据尽量在内存里处理完。

总体来说,Nginx 的调优没有一劳永逸的万能配置,还是要结合自己的业务模型去测,压测工具 wrk 或者 ab 跑起来,边改边观察,找到适合自己场景的平衡点才是正路。有问题欢迎留言讨论。
回复 转播

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表