服务覆盖:昆明·曲靖·玉溪·保山·昭通·丽江·普洱·临沧·楚雄·红河·文山·西双版纳·大理·德宏·怒江·迪庆

Nginx配置看这里:这几个优化让并发能力提升3倍

eycit 2026-04-23 1 次阅读 系统安装
---

theme: default themeName: "默认主题" title: "Nginx配置看这里:这几个优化让并发能力提升3倍"


Nginx配置看这里:这几个优化让并发能力提升3倍

Nginx性能强劲是公认的,但默认配置只是"能用",离"好用"还差得远。同样的服务器,配置调优和裸奔,性能能差好几倍。

上周帮一个客户做压测,2核4G的服务器,默认配置并发只能到800QPS。优化后飙到2500QPS,而且CPU占用还降了。客户问我用了什么黑科技,我说没有黑科技,就是把Nginx配置吃透了。

今天把几个核心优化点整理出来,都是实战检验过的,照抄就能用。

Worker进程数

默认配置:

worker_processes 1;

这个配置的意思是只开一个工作进程。单核时代没毛病,现在谁家服务器不是多核?

改成:

worker_processes auto;

auto会自动检测CPU核心数,开对应数量的worker。或者手动指定:

worker_processes 4;  # 4核CPU

每个worker进程是单线程的,多worker能充分利用多核。这是最基础也最重要的优化。

Worker连接数

events {

worker_connections 1024; }

默认1024,对于现代服务器来说太保守了。改成:

events {

worker_connections 4096; use epoll; # Linux系统 }

worker_connections是每个worker能处理的最大连接数。总并发能力 = worker_processes × worker_connections。4核配4096连接,理论上限是16384并发。

use epoll指定使用epoll事件模型,Linux下性能最优。

开启文件描述符

高并发场景下,系统默认的文件描述符限制会成为瓶颈。先改系统限制:

# 临时生效

ulimit -n 65535

永久生效,编辑 /etc/security/limits.conf

* soft nofile 65535 * hard nofile 65535

然后在Nginx配置:

worker_rlimit_nofile 65535;

这样Nginx进程能打开足够的文件描述符,不会因为连接数太多报错。

开启gzip压缩

gzip on;

gzip_min_length 1k; gzip_types text/plain application/json application/javascript text/css; gzip_comp_level 4;

压缩能大幅减少传输数据量,特别是API返回的JSON,压缩比能到70%以上。gzip_comp_level建议4-6,太高会浪费CPU,太低压缩效果不明显。

注意:图片、视频等已压缩文件不要再压缩,反而增加CPU开销。

连接复用优化

keepalive_timeout 65;

keepalive_requests 1000;

keepalive让连接保持,避免频繁建立断开。timeout设60-120秒,requests可以设大一点,复用更多请求。

对于后端是应用服务器的场景:

upstream backend {

server 127.0.0.1:8080; keepalive 128; # 保持128个长连接 }

配合应用服务器开启长连接,性能提升明显。

缓冲区调优

client_body_buffer_size 16k;

client_header_buffer_size 1k; client_max_body_size 20m; large_client_header_buffers 4 8k;

缓冲区太小会导致临时文件写入,影响性能。根据业务调整:

  • 普通API:client_body_buffer_size设16k-64k
  • 文件上传:调大client_max_body_size
  • 请求头大的场景:调大client_header_buffer_size

静态文件缓存

location ~* \.(js|css|png|jpg|gif|ico)$ {

expires 30d; add_header Cache-Control "public, immutable"; }

静态资源设置长缓存,减少重复请求。immutable告诉浏览器文件不会变,连验证请求都省了。

版本化静态文件名(app.v1.2.3.js)配合缓存效果最佳。

access_log优化

默认每个请求都写日志,高并发下会成为瓶颈。几种优化方式:

1. 关闭不必要的日志
location /static/ {

access_log off; }

2. 使用缓冲
access_log /var/log/nginx/access.log main buffer=32k flush=5s;

日志先写缓冲区,定期刷到磁盘。

3. 使用json格式
log_format json_combined escape=json '{ "time":"$time_iso8601",'

'"remote_addr":"$remote_addr",' '"request":"$request",' '"status":"$status",' '"body_bytes_sent":"$body_bytes_sent" }'; access_log /var/log/nginx/access.log json_combined;

JSON格式便于日志分析工具解析,不用正则匹配,效率更高。

验证优化效果

压测是检验真理的唯一标准。用wrk或ab:

wrk -t12 -c1000 -d30s http://your-server/api/test

记录优化前后的QPS、延迟、错误率。数据说话,别凭感觉。

看完还有什么疑问吗?

如果文章没有覆盖到你的情况,欢迎联系我们咨询——免费解答,说清楚再决定要不要服务。

📞 服务热线:13708730161 💬 微信:eyc1689 📧 邮箱:service@eycit.com 🌐 https://www.eycit.com

易云城IT服务,您身边的IT专家。

上一篇
这几款免费监控工具用好了,半夜再也不用被报警电话叫醒...
下一篇
服务器莫名重启怎么查?这套排查流程能揪出99%的元凶...