高并发带宽跑满的根源是传输层冗余流量,优化核心是减冗余、提单字节效率、释连接资源:启用gzip压缩(gzip on; gzip_vary on; level 6;覆盖text/css等类型)、静态资源强缓存(expires 30d; immutable;哈希命名)、零拷贝(sendfile on; tcp_nopush on; tcp_nodelay off)、限流限体(client_max_body_size; limit_req; if+return 444)。

高并发下网络带宽跑满,本质不是Nginx“处理不过来”,而是大量数据在传输层被反复搬运、未压缩、未复用或不合理堆积。优化重点不在加机器,而在减少冗余流量、提升单字节效率、释放连接资源。
压缩传输内容,直接削减带宽用量
未压缩的HTML、JS、CSS、JSON等文本资源常占响应体70%以上体积。开启Gzip是见效最快、成本最低的带宽优化手段:
-
必须启用:
gzip on;+gzip_vary on;(让CDN/代理识别压缩) -
合理设级:用
gzip_comp_level 6;(1–9中平衡点),级别过高CPU吃紧,过低压缩率不足 -
覆盖关键类型:
gzip_types text/plain text/css application/javascript application/json image/svg+xml;(别漏掉API常用格式) -
对代理友好:
gzip_proxied any;确保Nginx作为反向代理时仍对上游返回做压缩
静态资源强缓存,彻底拦截重复请求
带宽被耗尽,往往源于同一张图片、同一个JS文件被成千上万用户反复下载。浏览器缓存能直接从本地加载,0字节走公网:
- 对图片、字体、CSS、JS等资源,设置长期缓存:
expires 30d;或add_header Cache-Control "public, immutable"; - 配合版本号或哈希命名(如
app.a1b2c3.js),确保更新后缓存自动失效,避免手动清缓存 - 关闭这些资源的日志记录:
access_log off;,减少I/O干扰
启用零拷贝与TCP传输优化
传统文件传输需经内核→用户态→内核多次拷贝,消耗CPU且增加延迟。sendfile + tcp_nopush 能让数据在内核态直通网卡:
-
sendfile on;:启用零拷贝,尤其对大文件(图片、视频、下载包)效果显著 -
tcp_nopush on;:配合sendfile,攒够一个TCP包再发,减少小包数量和网络碎片 -
tcp_nodelay off;:静态资源场景下关闭Nagle算法反而更优(与tcp_nopush协同),避免人为延迟
限制非必要流量,守住带宽底线
不是所有请求都该被放行。恶意扫描、爬虫、异常大上传会瞬间打满出口带宽:
- 用
client_max_body_size 50m;防超大POST请求耗尽内存和带宽 - 用
limit_req模块限制高频接口(如登录、搜索),例如每秒最多10次,burst=20,防刷防爆 - 对已知攻击特征(如SQL注入、路径遍历)用
if+return 444;静默丢弃,不回包、不记日志











