如何通过 limit_req 模块保护后端服务器免受代理流量的突发冲击

秋涛同学_6722

秋涛同学_6722

2026-05-22

909人浏览

原创

在nginx负载均衡层启用limit_req是应对代理流量突发冲击最有效方式,需按代理特征设计key、分级配置burst/nodelay、闭环监控并补足连接层防护。

如何通过 limit_req 模块保护后端服务器免受代理流量的突发冲击

直接在 Nginx 负载均衡层启用 limit_req,是应对代理流量突发冲击最有效的方式。它不依赖后端、无额外延迟,把限流逻辑压到流量入口,让恶意或误配的代理请求在触达应用前就被识别和控制。

按代理特征设计限流 key,避免被绕过

普通 IP 限流对使用代理池、IP 轮换的流量效果有限。需结合可透传的代理标识做更精准识别:

  • 若代理层透传真实用户标识(如 X-Real-User-ID 或 X-Forwarded-For 中可信段),用 $http_x_real_user_id 或提取后的可信 IP 作为 key,比单纯用 $binary_remote_addr 更可靠
  • 对已知代理网段(如某 CDN 或爬虫服务商 IP 段),可用 geo 指令标记,再配合 map 构造特殊 key,例如:
    map $geo_proxy $limit_key { default $binary_remote_addr; 1 "$binary_remote_addr:proxy"; },然后基于 $limit_key 定义 zone
  • 组合维度更稳妥:用 "$limit_key$request_uri" 区分不同接口路径,防止一个代理刷多个接口耗尽单个 key 配额

burst 与 nodelay 必须按代理行为分级配置

代理流量常表现为高频率、低延迟、无感知重试——这决定了 burst 不能设大,nodelay 不能乱开:

WIME
WIME

WIME是一款面向电商商品图、海报、文案和详情页制作的 AI 内容创作平台。

下载
  • 对疑似扫描类代理(如高频访问 /robots.txt、/api/health):设 burst=0 或 burst=1 + nodelay,超速即拒,不给排队机会
  • 对业务型代理(如前端统一网关、第三方调用方):允许短时缓冲,burst = rate × 1~1.5 秒,例如 rate=20r/s → burst=30,但必须关闭 nodelay,让超量请求排队而非瞬间压向后端
  • 禁止在全局 location / 上统一加 nodelay,否则健康检查、静态资源等低风险路径也会触发激进拒绝,反而干扰运维判断

必须闭环:日志、状态码、内存监控缺一不可

没有可观测性的限流等于没开。代理流量往往隐蔽,靠默认日志很难定位问题源头:

  • 在 log_format 中强制加入 $limit(触发的 zone 名)和 $limit_key(实际统计值),例如:
    '$remote_addr $http_x_forwarded_for - [$time_local] "$request" $status $limit "$limit_key"'
  • 用 limit_req_status 429 将拒绝响应码从默认 503 改为标准 429 Too Many Requests,方便代理方识别并退避,也利于前端埋点统计
  • 定期检查共享内存 zone 使用率:nginx -T 2>/dev/null | grep "zone=" 查 size,确认是否足够——1MB ≈ 1.6 万个 key;若代理 IP 日活 20 万,zone 至少配 12MB,否则旧记录被挤掉,限流失效

补足连接层防护,防慢速代理耗尽资源

仅控请求速率不够。代理可能建大量长连接却不发数据(Slowloris 类攻击),或复用连接高频发请求:

  • 叠加 limit_conn:用 limit_conn_zone $binary_remote_addr zone=conn_perip:10m,再在关键 location 加 limit_conn conn_perip 50,限制单 IP 并发连接数
  • 调小 keepalive_timeout(如设为 15s),缩短空闲连接生命周期,降低连接堆积风险
  • 对明确为代理的请求头(如 User-Agent: *bot* 或含 X-Forwarded-For 多级 IP),可结合 if + return 403 做前置拦截(注意:仅用于简单过滤,不替代限流)

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2583

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6590

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6006

10

服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

457

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

940

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

3072

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

1016

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

909

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

474

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
LLVM官方文档
LLVM官方文档

共0课时 | 0人学习