一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Nginx 中如何进行静态资源访问速率配置

时间:2026-08-20 12:21:49 编辑:袖梨 来源:一聚教程网

Nginx静态资源访问速率配置通过limit_req限流、limit_conn连接数限制、按资源类型差异化配置及日志监控实现稳定防护;具体包括定义限流区域、设置rate/burst/nodelay参数、每IP并发连接上限、分扩展名设定不同速率,并将拒绝状态码改为429便于前端处理。

在 Nginx 中,静态资源访问速率配置主要指限制客户端对静态文件(如图片、CSS、JS)的请求频率,防止突发流量冲击服务器或被恶意刷取。这不是单纯靠缓存或压缩实现的“加速”,而是通过限流机制保障服务稳定性和公平性。

使用 limit_req 控制每秒请求数

这是最常用、最直接的方式,适用于防止爬虫高频抓图、脚本批量下载等场景。

  1. http 块中定义限流区域,按客户端 IP 统计:

limit_req_zone $binary_remote_addr zone=static_rate:10m rate=5r/s;

  1. 在对应静态资源的 location 块中启用该限制:

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

limit_req zone=static_rate burst=10 nodelay;

}

说明:

rate=5r/s 表示平均允许每秒 5 个请求;

burst=10 允许最多 10 个请求暂存(排队),超出则拒绝(返回 503);

nodelay 表示不延迟执行,超限立即拒绝,适合防攻击;去掉则按漏桶平滑处理。

结合连接数限制更稳妥

仅限请求频次还不够,高并发下大量短连接仍可能耗尽资源。建议叠加连接数控制:

  1. 定义连接限制区域(需放在 http 块):

limit_conn_zone $binary_remote_addr zone=conn_perip:10m;

  1. 在静态 location 中应用:

limit_conn conn_perip 16;

这表示每个 IP 最多维持 16 个并发 TCP 连接,能有效抑制多线程下载工具或恶意连接复用。

区分资源类型设置不同速率

不是所有静态资源都该一视同仁。例如图标(.ico)可设更高频次,大图(.jpg/.png)应更严格:

  1. 为不同扩展名分别定义限流区域:

limit_req_zone $binary_remote_addr zone=img_rate:10m rate=2r/s;

limit_req_zone $binary_remote_addr zone=asset_rate:10m rate=10r/s;

  1. 再分别匹配:

location ~* .(jpg|jpeg|png|webp|gif)$ {

limit_req zone=img_rate burst=5 nodelay;

}

location ~* .(css|js|woff2|svg)$ {

limit_req zone=asset_rate burst=20;

}

配合日志与监控判断效果

限流生效后,Nginx 默认会记录被拒绝的请求(日志中出现 limiting requests 或状态码 503)。建议:

  1. 在 location 块中添加自定义日志标记,便于识别限流行为:

limit_req_log_level warn;

limit_req_status 429;

将拒绝状态码改为 429 Too Many Requests,更符合语义,也方便前端做重试逻辑;warn 级别日志便于排查误伤正常用户。

热门栏目