Nginx性能优化调优:从连接数到缓存的实际配置步骤
Nginx性能优化调优的核心目标是用尽量少的资源支撑更高的并发连接和更快的响应速度。
对于刚接手服务器的新手来说,不需要一上来就改几十个参数,按顺序调整进程模型、连接数、压缩、缓存和系统内核限制,通常就能覆盖大多数中小型站点的瓶颈。
下面按可执行的顺序展开,每一步都给出配置文件片段和验证方式。
开始前需要确认的环境条件
先确认Nginx已经安装并能正常运行,同时知道配置文件的真实路径。
不同系统默认路径可能不同,不要凭记忆操作。
执行以下命令查看版本和配置路径:
nginx -v
nginx -t
nginx -t用于检查当前配置是否有语法错误。
如果这一步就报错,先修复原有问题,不要在错误配置上继续叠加修改。
主配置文件通常在 /etc/nginx/nginx.conf,站点配置在 /etc/nginx/conf.d/ 或 /etc/nginx/sites-enabled/。
修改前先备份:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
查看当前系统负载和内存,作为后续对比基准:
free -h
uptime
top
调整进程与连接数参数
Nginx默认的 worker_processes 1 只能用一个CPU核心,现代服务器通常有多个核心,这个参数不调整会浪费硬件。
打开主配置文件,确认或修改以下几项:
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 10240;
multi_accept on;
use epoll;
}
解释一下这几个参数:
worker_processes auto让Nginx自动按CPU核心数启动工作进程,是最省心的写法。worker_rlimit_nofile提高单个进程可打开的文件描述符上限,否则高并发时会报“too many open files”。worker_connections是单个工作进程允许的最大连接数,配合进程数决定理论并发上限。multi_accept on让一个进程一次接受多个新连接,减少轮询开销。use epoll是Linux下的高效事件模型,一般保持开启。
修改后检查并平滑重载,不要直接重启导致连接中断:
nginx -t
nginx -s reload
如果 nginx -t 报未知指令,检查是否把 worker_rlimit_nofile 写到了 events 块内部,它应该写在 events 块外面。
开启压缩和静态资源缓存
对于返回文本类内容的站点,开启gzip能明显减少传输体积,但要避免对图片、视频等已经压缩过的文件重复压缩。
在 http 块中加入:
gzip on;
gzip_min_length 1k;
gzip_comp_level 5;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
gzip_vary on;
gzip_comp_level 建议不要调到9,压缩等级越高CPU消耗越大,5左右在体积和CPU之间比较平衡。
静态资源缓存通过 expires 和 Cache-Control 控制,让浏览器在一段时间内不再重复请求:
location ~* \.(jpg|jpeg|png|gif|ico|css|js|webp)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
注意:如果静态文件名不带版本号或哈希,缓存时间设太长会导致更新后用户仍看到旧文件,建议配合前端构建工具生成带哈希的文件名。
系统内核参数与文件描述符限制
Nginx的并发能力不只取决于自身配置,还受Linux系统限制。
查看当前文件描述符上限:
ulimit -n
如果显示1024,在高并发下很容易触发错误。
临时提高:
ulimit -n 65535
永久生效需要修改 /etc/security/limits.conf,加入:
* soft nofile 65535
* hard nofile 65535
修改后需要重新登录或重启相关服务才能生效。
对于大量短连接场景,还可以调整内核参数,但这类改动影响面较大,建议先在测试环境验证:
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
修改 /etc/sysctl.conf 后执行 sysctl -p 使其生效。
如果不清楚参数含义,不要照搬网上的高并发模板,先理解再改。
验证优化效果与常见问题
配置完成后,用压测工具对比优化前后的并发能力。
没有专业工具时,可以先观察实际访问下的错误日志:
tail -f /var/log/nginx/error.log
常见报错和处理方式:
worker_connections are not enough:说明连接数不够,适当提高worker_connections,同时确认系统文件描述符上限已同步提高。too many open files:系统限制没放开,回到内核参数部分检查ulimit和limits.conf。- 修改配置后
nginx -t通过但访问异常:检查站点配置是否被包含,以及防火墙和云安全组是否放行端口。
验证时不要只看首页打开速度,还要关注并发请求下的响应时间变化。
可以用 ab 或 wrk 做简单压测,但要注意压测本身也会消耗本机资源,最好从另一台机器发起。
关于Nginx性能优化调优,有几个容易踩的坑:
- 一次性修改大量参数,出问题后无法定位是哪一项导致的,建议分批修改并记录。
- 直接重启而不是平滑重载,造成短暂服务中断。
- 把所有缓存时间都设成很长时间,导致内容更新不及时。
- 忽略云服务器自带的安全组限制,以为改完Nginx就万事大吉。
完成上述调整后,再次用 nginx -t 检查配置,用 nginx -s reload 平滑生效,然后通过日志和压测结果确认并发能力和响应时间是否改善。
如果环境特殊或参数不确定,先保留备份,逐步回退验证,不要在生产环境直接套用未经确认的配置。