news 2026/5/6 20:30:43

Nginx在CDN加速或使用SLB代理后获取真实IP并实现并发访问限制(限流)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nginx在CDN加速或使用SLB代理后获取真实IP并实现并发访问限制(限流)

当用户访问网站时,在使用CDN或SLB的情况下,访问链路通常是这样的:

用户浏览器 → CDN节点/SLB节点 → 源服务器

在这种情况下,源服务器接收到的请求来源IP实际上是CDN或SLB节点的IP,而不是用户的真实IP。如果我们直接基于这个IP进行限流,就会出现以下问题:

  1. 限制了CDN/SLB节点而非真实用户
  2. 无法对真实的恶意用户进行有效拦截
  3. 限流策略失效

二、普通限流配置

在没有CDN/SLB的简单场景下,我们可以直接基于$binary_remote_addr进行限流:

## 以用户IP地址作为Key,每个IP地址最多有50个并发连接 limit_conn_zone $binary_remote_addr zone=TotalConnLimitZone:10m; limit_conn TotalConnLimitZone 50; limit_conn_log_level notice; ## 以用户IP地址作为Key,每个IP地址每秒处理10个请求 limit_req_zone $binary_remote_addr zone=ConnLimitZone:10m rate=10r/s; limit_req_log_level notice; ## 具体服务器配置 server { listen 80; location ~ \.php$ { ## 最多5个排队,由于每秒处理10个请求+5个排队, ## 你一秒最多发送15个请求过来,再多就直接返回503错误给你了 limit_req zone=ConnLimitZone burst=5 nodelay; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; } }

这种方式适用于用户直接访问源服务器的场景,但对于经过CDN/SLB代理的情况则不再适用。

三、CDN/SLB模式下的限流解决方案

1. 理解X-Forwarded-For头部

当CDN/SLB代理服务器将用户请求转发到后端服务器时,会在HTTP头中加入记录:

X-Forwarded-For: 用户IP, 代理服务器1-IP, 代理服务器2-IP, ...

经过多层代理后,用户的真实IP在第一个位置,后面会跟一串中间代理服务器的IP地址。

2. 获取真实IP的配置

http { ## 获取原始用户的真实IP地址 map $http_x_forwarded_for $clientRealIp { default $remote_addr; ~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr; } ## 设置IP白名单,对内部的IP不限制 map $clientRealIp $limit { default $clientRealIp; xx.xx.xx.xx ""; } ## 以真实IP为单位,限制请求数,并返回429状态; limit_req_status 429; limit_req_zone $limit zone=ConnLimitZone:20m rate=5r/s; limit_req_log_level notice; ## 以真实IP为单位,限制该IP的并发连接数,并返回429状态; limit_conn_status 429; limit_conn_zone $limit zone=TotalConnLimitZone:20m; limit_conn TotalConnLimitZone 100; limit_conn_log_level notice; ## 以访问域名为单位,限制总并发链接数; limit_conn_zone $server_name zone=SumConnLimitZone:20m; } ## 具体Server配置 server { listen 80; location ~ \.php$ { ## 限制总并发连接数 limit_conn SumConnLimitZone 10000; ## 最多5个排队,由于每秒处理10个请求+5个排队, ## 你一秒最多发送15个请求过来,再多就直接返回429错误给你了 limit_req zone=ConnLimitZone burst=5 nodelay; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; } }

3. 配置说明

  1. map指令:用于从X-Forwarded-For头部提取用户真实IP
  2. 白名单机制:对特定IP(如内部服务器)不进行限流
  3. 三层限流策略
    • 基于真实IP的请求频率限制
    • 基于真实IP的并发连接数限制
    • 基于域名的总并发连接数限制

四、验证方法

1. 白名单测试

对于白名单内的服务器进行压测,应该全部通过。

2. 非白名单测试

对于不在白名单内的IP,最多允许通过10+5个请求,其余部分应该返回429错误。

3. 压测工具

CentOS一般自带siege压测工具:

yum -yinstallsiege# 使用方法siege -c3-r10-b https://xxxx.xx.com/api/xxxx# -c 3 表示3个用户# -r 10 表示访问10次# 以上表示:3个用户,每个用户访问10次请求,共计30次

五、调试技巧:Echo模块

为了验证配置是否正确,可以使用Nginx的echo模块进行调试:

1. 集成Echo模块

cd/usr/local/src# 下载echo模块并解压wgethttps://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gztarzxvf v0.61.tar.gz# 下载nginx并解压wgethttp://nginx.org/download/nginx-1.12.2.tar.gztar-xzvf nginx-1.12.2.tar.gzcdnginx-1.12.2/# 查看当前nginx的编译参数/usr/local/nginx/sbin/nginx -V# 在旧的编译参数基础上新增【--add-module=/echo模块的解压路径】参数,开始编译./configure --prefix=/usr/local/nginx/nginx --add-module=/usr/local/src/echo-nginx-module-0.61# make编译make-j2# 平滑升级nginxmv/usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.oldcp-f objs/nginx /usr/local/nginx/sbin/makeupgrade

2. Echo使用示例

server { listen 80; server_name yourdomain.com; ## 以下新增规则: ## 当用户访问 /ip 的时候,我们输出 $clientRealIp 和 $limit 变量, ## 看看这个变量值是不是真的 用户源IP 地址 location /ip { echo $clientRealIp; echo $limit; } }

通过访问http://xxx.xxx.cn/ip可以验证获取到的IP是否为用户真实IP。

六、最佳实践建议

  1. 合理设置限流参数:根据业务实际情况调整请求频率和并发连接数限制
  2. 维护白名单:将内部服务器、合作伙伴服务器等加入白名单
  3. 监控告警:建立完善的监控体系,及时发现异常流量
  4. 渐进式部署:先在测试环境验证,再逐步推广到生产环境
  5. 定期评估:根据业务发展定期评估和调整限流策略

结语

通过合理配置Nginx的限流模块,即使在复杂的CDN/SLB架构下,我们也能有效识别用户真实IP并实施精准的访问控制。这不仅能够保护服务器免受恶意攻击,还能确保正常用户的访问体验。在实际应用中,需要根据具体的业务场景和安全要求来调整相关参数,以达到最佳的防护效果。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 15:27:33

好写作AI构思革命:当AI开始理解你的“潜台词”与学术野心

如果语法检查是确保你“衣着整洁”&#xff0c;那么深层构思辅助就是帮你练出“思想的八块腹肌”——前者让你能出门&#xff0c;后者让你在学术舞台上脱颖而出。好写作AI官方网址&#xff1a;https://www.haoxiezuo.cn/学术写作的“冰山困境”&#xff1a;海面下的才是重点研究…

作者头像 李华
网站建设 2026/5/5 13:53:37

你还在手动调试量子电路?VSCode扩展配置指南来了!

第一章&#xff1a;量子模拟器 VSCode 扩展的配置为在本地开发环境中高效运行和调试量子算法&#xff0c;配置支持量子计算的 Visual Studio Code 扩展至关重要。通过安装专用扩展包&#xff0c;开发者可在熟悉的编辑器中编写量子电路、模拟执行结果并可视化量子态。安装 Quant…

作者头像 李华
网站建设 2026/5/5 11:27:45

好写作AI诚信伙伴:当AI成为学术红绿灯,而非“代写捷径”

如果AI写作工具被比作汽车&#xff0c;那么学术诚信就是交通规则——好写作AI的设计理念&#xff0c;是成为最智能的“导航与防碰撞系统”&#xff0c;而不是教你如何超速又不被拍的“神秘代码”。好写作AI官方网址&#xff1a;https://www.haoxiezuo.cn/功能设计核心&#xff…

作者头像 李华
网站建设 2026/5/3 9:56:53

多模态大模型对齐技术演进史:从CLIP到智能体的三条技术路线全解析!

简介 本文详细解析了多模态大模型对齐技术的演进路径&#xff0c;归纳为三条技术路线&#xff1a;CLIP模型的对比学习基础、生成模型的组装式对齐策略&#xff0c;以及Data Agent系统的自迭代数据飞轮。这些路线分别从表征基础、模型架构与数据生态三个维度&#xff0c;推动多…

作者头像 李华