Nginx静态资源限速需按类型或路径差异化配置:精准匹配后缀(如jpg、woff2)或路径(如/images/)设置独立限速区,结合map白名单放行CDN与爬虫,辅以缓存头与安全策略降低请求压力。

在 Nginx 中管理静态资源的访问频率,核心是按资源类型或路径做差异化限速,而不是一刀切地限制所有请求。重点在于识别真实静态文件、避开干扰流量(如爬虫、CDN、favicon.ico)、并配合缓存策略减少重复校验压力。
按文件后缀精准匹配限速
适用于资源混布但扩展名明确的场景,比如图片、字体、JS/CSS 分散在不同目录但都带标准后缀:
- 用大小写不敏感正则匹配:
location ~* \.(jpg|jpeg|png|gif|webp)$控制图片类 - 单独为字体设限:
location ~* \.(woff2|ttf|eot|svg)$,通常请求量小但需高可用,可设较低速率(如 5r/s)和较小 burst(如 5) - 避免误伤动态接口:正则 location 优先级低于
^~,确保不会覆盖location /api/这类路径
按路径分区域独立限速
适合目录结构清晰的项目,例如所有前端资源统一放在 /static/,图片集中在 /images/:
- 在
http块中定义多个 zone:limit_req_zone $uri zone=images:10m rate=20r/s;和limit_req_zone $uri zone=static:10m rate=30r/s; - 在对应 location 中启用:
location ^~ /images/ { limit_req zone=images burst=50 nodelay; } - 使用
$uri而非$binary_remote_addr作为 key,可避免同一 IP 访问多个图片时被过度压制
放行可信来源,避免误杀
静态资源常被 CDN 回源、搜索引擎爬虫高频抓取,直接限速可能影响收录或缓存更新:
- 用
map指令构造白名单键:map $http_user_agent $limit_key { default $binary_remote_addr; ~*Cloudflare ""; ~*Googlebot ""; } - 基于该键定义 zone:
limit_req_zone $limit_key zone=assets:10m rate=50r/s; - 对
/favicon.ico和/robots.txt不做任何限速,它们本就无害且高频
配合缓存与安全头,降低实际处理压力
限频只是最后一道防线,真正减轻服务端负担靠的是让请求尽量不抵达 Nginx 处理逻辑:
- 对长期不变资源(如带哈希版本号的
/app.a1b2c3.js)加expires 1y;和add_header Cache-Control "public, immutable"; - 禁用目录浏览:
autoindex off;;屏蔽隐藏文件:location ~ /\. { deny all; } - 只允许 GET/HEAD:
limit_except GET HEAD { deny all; },防止扫描器滥用其他方法


















