nginx 流量整形需结合限速、限连、分类策略与安全防护:按路径(如静态资源)精准限速,区分 js/css、图片、字体等资源设置差异化 rate/burst,叠加 limit_conn 防多线程滥用,并协同缓存、https、hsts 等安全配置。

在 Nginx 中实现安全合理的流量整形,关键不是“一刀切”地压低流量,而是把限速、限连、分类策略和安全防护有机结合起来——既防攻击、保稳定,又不误伤正常用户或关键业务路径。
只对静态资源路径精准限速
静态文件(如 .jpg、.js、.css、.woff2)是带宽和磁盘 I/O 的主要消耗者,但动态接口(如 /api/login)需要更高响应自由度。不能全局限流,必须按路径隔离控制:
- 用正则 location 精确匹配扩展名:
location ~* \.(?:jpg|jpeg|png|js|css|woff2)$ - 在
http块定义独立限速区,例如:limit_req_zone $binary_remote_addr zone=static:10m rate=3r/s; - 在对应 location 中启用:
limit_req zone=static burst=5 nodelay;,允许短时小突发,拒绝排队等待
区分资源类型设置差异化策略
图标和 JS/CSS 加载慢会影响首屏体验,而大图下载慢影响较小——应按资源敏感度分级限速:
- JS/CSS 路径单独建 zone:
limit_req_zone $binary_remote_addr zone=js_css:10m rate=15r/s;,burst 可设为 20 - 高清图片路径用更严策略:
limit_req_zone $binary_remote_addr zone=img:10m rate=2r/s;,并叠加连接限制:limit_conn conn_per_ip 2; - 字体或小图标可放宽:
rate=20r/s+burst=30,减少阻塞感
叠加连接数限制防多线程滥用
单个 IP 同时开 20 个连接下载图片,会迅速耗尽 worker_connections,比请求速率更危险:
- 先定义连接区:
limit_conn_zone $binary_remote_addr zone=conn_per_ip:10m; - 在静态资源 location 中添加:
limit_conn conn_per_ip 3;,即每个 IP 最多 3 个并发连接 - 该配置对迅雷、IDM 等多线程工具效果明显,且不影响浏览器正常并行加载(通常 ≤6)
确保限速与缓存、安全配置协同生效
限速只对未命中缓存的请求起作用;若缓存头配置不当,可能让限速形同虚设:
- 静态资源 location 中必须配缓存指令:
expires 1y;+add_header Cache-Control "public, immutable"; - 隐藏版本信息:
server_tokens off;,避免暴露 Nginx 版本被针对性利用 - 禁用危险方法:
if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|PATCH)$) { return 405; } - 所有对外入口强制 HTTPS,TLS 仅启用 v1.2+,并开启 HSTS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;











