Nginx 中怎么限制静态资源的访问频率防止恶意下载

Nginx 通过差异化限速保护静态资源:按后缀(如 jpg/png)、路径(如 /uploads/)和来源(如 CDN/爬虫)分别配置 limit_req,结合白名单、缓存与日志实现精准防护。

nginx 中怎么限制静态资源的访问频率防止恶意下载

在 Nginx 中限制静态资源访问频率,核心不是“一刀切”地压低所有请求,而是按资源类型、路径或来源做差异化限速,既防恶意下载(如爬虫批量抓图、盗链 JS/CSS),又不干扰浏览器正常预加载、CDN 回源和合法用户访问。

按文件后缀精准限速

对高频被滥用的资源(如图片、字体、压缩包)单独设限,避免影响 HTML 或 API:

  • 用大小写不敏感正则匹配扩展名:location ~* .(jpg|jpeg|png|gif|webp)$
  • 定义独立限速区,以 IP 为键更合理(防单 IP 扫描):limit_req_zone $binary_remote_addr zone=img_limit:10m rate=8r/s;
  • 在 location 中启用并设置缓冲:limit_req zone=img_limit burst=20 nodelay; —— 允许短时突发,但超量立即拒绝,不排队
  • 对 .zip/.pdf/.exe 等易被恶意下载的资源,可进一步收紧:rate=2r/s; burst=5;

按目录结构分区域限速

如果静态资源有清晰部署路径(如 /static/、/uploads/),优先用 ^~ 前缀匹配,性能更高、逻辑更稳:

  • location ^~ /uploads/ {
  •   limit_req zone=upload_limit burst=10 nodelay;
  •   expires 1h; —— 配合缓存头,降低重复请求压力
  • }
  • 对应在 http 块中定义:limit_req_zone $binary_remote_addr zone=upload_limit:10m rate=5r/s;

放行可信来源,避免误伤

CDN 节点、搜索引擎爬虫、监控探针常高频请求静态资源,需白名单豁免:

  • map 指令构造动态键:map $http_user_agent $limit_key { default $binary_remote_addr; ~*Cloudflare “”; ~*Googlebot “”; }
  • 基于该键建限速区:limit_req_zone $limit_key zone=asset_limit:10m rate=30r/s;
  • 再在 location 中引用:limit_req zone=asset_limit burst=60;
  • 也可直接跳过 favicon.ico 和 robots.txt:location = /favicon.ico { access_log off; log_not_found off; }

配合缓存与日志验证效果

限速只是手段,必须搭配可观测性和防御纵深:

  • 静态资源务必加强缓存策略:add_header Cache-Control “public, max-age=31536000, immutable”;(尤其带哈希版本号的 JS/CSS)
  • 禁用对带版本号资源(如 app.a1b2c3.js)的过度限速,否则热更新可能失败
  • 开启限流日志便于排查:limit_req_log_level warn;,并在 log_format 中加入 $limit 变量记录是否触发限速
  • 上线前用 ab 或 wrk 模拟攻击流量测试,确认 503 响应符合预期,且正常页面浏览不受影响

文章来自机圈观察员网,发布者:,转载请注明出处:https://www.jqgcy.com/xitongjiaocheng/123747.html

Go语言中基于Trie树的高效字符串前缀匹配算法实现
上一篇 2026-07-01 13:13
JavaScript 中 null 在 API 响应结构设计中的标准化
下一篇 2026-07-01 13:26

相关推荐