Nginx在CDN加速之后,获取用户真实IP做并发访问限制的方法

Nginx网站使用CDN之后禁止用户真实IP访问的方法 Nginx网站使用CDN之后禁止用户真实IP访问的方法 做过面向公网WEB运维的苦逼们肯定见识过各种恶意扫描、拉取、注入等图谋不轨行为吧?对于直接对外的WEB服务器,我们可以直接通过 iptables 、 Nginx 的deny指令或者是程序来ban掉这些恶意请求。 而对于套了一层 CDN 或代理的网站,这些方法可能就失效了。尤其是个人网站,可能就一台VPS,然后套一个免费的CDN就行走在互联网了。并不是每个CDN都能精准的拦截各种恶意请求的,更闹心的是很多CDN还不支持用户在CDN上添加BAN规则,比如腾 阅读详情
 

一、普通配置

什么叫普通配置?

普通配置就是针对【用户浏览器】→【网站服务器】这种常规模式的nginx配置。那么,如果我要对单IP做访问限制,绝大多数教程都是这样写的:

<span style="font-size:18px;">## 你想开 几千个连接 刷死我? 超过 50 个连接,直接返回 503 错误给你,根本不处理你的请求了
limit_conn_zone $binary_remote_addr zone=TotalConnLimitZone:10m ;
limit_conn  TotalConnLimitZone  50;
limit_conn_log_level notice;
 
## 用户的 IP 地址 $binary_remote_addr 作为 Key,每个 IP 地址每秒处理 10 个请求
## 你想用程序每秒几百次的刷我,没戏,再快了就不处理了,直接返回 503 错误给你
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;
}
 </span>

②、echo用法举例:

其实就和shell的echo差不多,能否输出自定义信息。

比如,在nginx里面配置如下:

访问http://yourdomain.com/hello 就会在浏览器里面输出hello, world! 了(如果域名开了CDN可能会报404)。

又比如,测试本文提到的真实用户的IP,只要在本文第二步配置基础上,加上如下规则并reload即可:

<span style="font-size:18px;">server {
listen   80;
        server_name  yourdomain.com;
        ## 以下是新增规则:
        ## 当用户访问 /realip 的时候,我们输出 $clientRealIp 变量,看看这个变量
        ## 值是不是真的 用户源IP 地址
        location /realip {
                echo $clientRealIp;
        }
}</span>


这样一个最简单的服务器安全限制访问就完成了,这个基本上你 Google 一搜索能搜索到  90% 的网站都是这个例子,而且还强调用“$binary_remote_addr”可以节省内存之类的云云。

二、CDN之后

目前国内已经争相出现了百度云加速、加速乐、360网站卫士以及安全宝等免费CDN。让我们这些小网站也能免费享受以前高大上的CDN加速服务。

于是,网站的访问模式就变为:

用户浏览器 → CDN节点 → 网站源服务器

甚至是更复杂的模式:

用户浏览器 → CDN节点(CDN入口、CC\DDoS攻击流量清洗等) → 阿里云盾 → 源服务器

可以看到,我们的网站中间经历了好几层的透明加速和安全过滤, 这种情况下,我们就不能用上面的“普通配置”。因为普通配置中基于【源IP的限制】的结果就是,我们把【CDN节点】或者【阿里云盾】给限制了,因为这里“源IP”地址不再是真实用户的IP,而是中间CDN节点的IP地址。

我们需要限制的是最前面的真实用户,而不是中间为我们做加速的加速服务器。

其实,当一个 CDN 或者透明代理服务器把用户的请求转到后面服务器的时候,这个 CDN 服务器会在 Http 的头中加入一个记录

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

如果中间经历了不止一个代理服务器,这个记录会是这样

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

可以看到经过好多层代理之后, 用户的真实IP 在第一个位置, 后面会跟一串中间代理服务器的IP地址,从这里取到用户真实的IP地址,针对这个 IP 地址做限制就可以了。

那么针对CDN模式下的访问限制配置就应该这样写:

<span style="font-size:18px;">map $http_x_forwarded_for  $clientRealIp {
"" $remote_addr;
~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr;
}
 
## 针对原始用户 IP 地址做限制
limit_conn_zone $clientRealIp zone=TotalConnLimitZone:20m ;
limit_conn  TotalConnLimitZone  50;
limit_conn_log_level notice;
 
## 针对原始用户 IP 地址做限制
limit_req_zone $clientRealIp zone=ConnLimitZone:20m  rate=10r/s;
#limit_req zone=ConnLimitZone burst=10 nodelay; #如果开启此条规则,burst=10的限制将会在nginx全局生效
limit_req_log_level notice;
 
## 具体Server:如下在监听php部分新增限制规则即可
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;
}
 
}</span>

三、echo模块

作者原文提到了nginx的一个echo模块,特意玩了下感觉挺有意思的,下面贴一下简单集成步骤。

①、给nginx集成echo模块:
<span style="font-size:18px;">#下载echo模块并解压:
wget https://github.com/openresty/echo-nginx-module/archive/v0.57.tar.gz
tar zxvf v0.57.tar.gz
 
#下载nginx并解压
wget http://nginx.org/download/nginx-1.6.0.tar.gz
tar -xzvf nginx-1.6.0.tar.gz
cd nginx-1.6.0/
 
#查看在用nginx的编译参数(如果是全新安装则省略)
/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.6.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) #以下这行即为旧的编译参数:
configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_gzip_static_module
#在旧的编译参数基础上新增【--add-module=/echo模块的解压路径】参数,开始编译
./configure --prefix=/usr/local/nginx/nginx  --add-module=/usr/local/src/echo-nginx-module-0.57
 
#make编译
make -j2
 
#平滑升级nginx (如果是全新安装请执行:make install)
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
cp -f objs/nginx /usr/local/nginx/sbin/
make upgrade</span>

②、echo用法举例:

其实就和shell的echo差不多,能否输出自定义信息。

比如,在nginx里面配置如下:

location/hello{
  echo"hello, world!";
}

访问http://yourdomain.com/hello 就会在浏览器里面输出hello, world! 了(如果域名开了CDN可能会报404)。

又比如,测试本文提到的真实用户的IP,只要在本文第二步配置基础上,加上如下规则并reload即可:

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

生效后,访问http://yourdomain.com/realip 就能显示你所用电脑(宽带)的真实IP了(可在ip138查验准确性):

Ps:感兴趣又喜欢学习的童鞋可以看下相关wiki文档:http://wiki.nginx.org/HttpEchoModule

本文介绍到这就差不多结束了,也是在神作的基础上精简整理并测试的,如果看完还有些许疑问,请前往查看神作原文,也许还是大神写的比较好理解(是否是原创我就不深究了,感觉也是转来转去,都没留链接,悲哀的互联网)!

本文整理自【棒主妇开源】,原文地址:《网站安全配置(Nginx)防止网站被攻击》。




把 SAP 配置当成一张地图:用 IMG 把实施、变更与治理串成一条清晰的路 摘要 SAP IMG(Implementation Guide)是SAP实施的核心导航体系,它将客户需求转化为系统配置,提供结构化路径和文档化支持。IMG不是简单的菜单树,而是包含业务落地路径、标准化配置活动和文档化知识的实施语言。通过三种视图(Reference、Enterprise、Project)解决不同管理问题,其中Project IMG尤其重要,可管理项目范围、分工和进度。实际工作中应通过SPRO事务码访问IMG,将探索与执行分开管理。案例显示,跨国企业通过Project IMG可有效控制组织架构 阅读详情

相关推荐

TCP协议中ARQ自动重传的三种实现方式对比(含SACK详解)

本文深入解析TCP协议中ARQ自动重传的三种实现方式,包括停止-等待、回退N步和选择重传协议,特别详细介绍了SACK机制的工作原理和优势。通过对比分析各协议的效率、复杂度和适用场景,为网络通信中的可靠性传输提供了实用的选型指南。

weixin_30776273的博客 462

nginx禁用ip方法

这样,当IP地址为192.168.1.100的客户端的连接数超过1或请求频率超过10个请求/秒时,Nginx将限制其访问。通过以上几种方法,可以在Nginx中有效地禁用特定IP的访问。指令的组合来限制IP访问。指令来禁止特定IP的访问。这样,除了IP地址为192.168.1.100的请求之外,其他IP地址都将被允许访问。指令来限制特定IP的连接数和请求频率。这些指令可以在Nginx的配置文件中的。指令来禁止特定IP的访问外,还可以使用HTTP模块的。指令:在Nginx的配置文件中,可以使用。

php-yyds 1万+

绕过卡巴斯基通过RPC控制lsass注入DLL

参考国外的XPN以及3gstudent大佬的文章: https://blog.youkuaiyun.com/xiangshen1990/article/details/104872566 https://gist.github.com/xpn/93f2b75bf086baf2c388b2ddd50fb5d0 原理:正常的ssp扩展(dll)可以加载到lsass进程中去,比如kerberos验证都是通...

2ed 3524

Nginx限制IP访问详解

通过使用Nginx的allow和deny指令,可以轻松地控制哪些IP地址或子网段能够访问网站资源。这对于保护敏感信息、限制恶意访问等场景非常有用。希望本文能帮助你更好地理解和配置Nginx的IP访问控制功能。

你知道莽村的莽怎么来的吗! 5262

数据资产目录(SailCatalog)和数据地图(SailMap)

笔者接下来准备开发大数据平台(XSailboat)中的数据资产目录(SailCatalog)和数据地图(SailMap)相关的功能,本文用以记录笔者关于此部分功能的概念梳理和主体功能设计。

OkGogooXSailboat的博客 2327

无法联网的情况下,dbeaver离线安装数据库驱动-clickhouse

无法联网的情况下,dbeaver离线安装数据库驱动-clickhouse

u012831187的博客 1万+

Nginx的访问限制与访问控制

访问限制是一种防止恶意访问的常用手段,可以指定同一IP地址在固定时间内的访问次数,或者指定同一IP地址在固定时间内建立连接的次数,若超过网站指定的次数访问将不成功。原理:基于用户的访问控制是指通过用户的信息,来判断是否接受该请求,该功能基于Nginx模块——ngx_http_auth_basic_module。1、原理:基于主机的访问控制是指通过主机的信息,来判断是否接受请求,该功能基于Nginx模块——ngx_http_access_module。请求频率限制是限制客户端固定时间内发起请求的次数。

个人站点:https://www.heimajinpai.cn/ 3784

从零开始学DAG:用dagitty软件快速构建因果图的5个步骤

本文为初学者提供了使用dagitty软件快速构建因果图的5个实用步骤。通过一个公共卫生研究实例,详细演示了如何从定义核心变量开始,逐步引入混杂、中介和碰撞变量,最终利用dagitty的自动分析功能识别最小充分调整集,从而科学指导研究设计与统计分析,有效提升因果推断的严谨性。

ii567的博客 800

如何用Nginx实现对城市以及指定IP的访问限制?

Nginx搭配geoip2实现对城市以及指定IP的访问限制

StoNENee的博客 4967

Cadence ADE实战:1GHz VCO相位噪声仿真全流程(附PSS/Pnoise避坑指南)

本文详细介绍了在Cadence ADE环境中对1GHz VCO进行相位噪声仿真的完整流程。重点剖析了PSS(周期性稳态分析)和Pnoise(周期性噪声分析)两大核心引擎的关键参数设置与避坑指南,帮助射频与模拟IC设计者准确评估VCO性能,解决仿真不收敛、结果异常等常见问题。

rock5的博客 670

光学系统仿真软件:OSLO_(13).衍射光学元件设计v1

目标函数是设计DOE的关键步骤之一。目标函数可以是一个具体的光强分布,也可以是一个特定的波前形状。在仿真软件中,目标函数通常用数学表达式或数据文件来定义。假设我们需要设计一个二元相位掩模,使其在特定位置生成三个焦点。我们可以定义一个目标函数来描述这三个焦点的光强分布。# 定义目标函数"""定义一个多焦点目标函数:param x: 横坐标:param y: 纵坐标:param z1: 第一个焦点的深度:param z2: 第二个焦点的深度:param z3: 第三个焦点的深度。

kkchenjj的博客 1003

Nginx 设置黑/白名单IP限制、国家城市IP访问限制,实战教程!(最新)

今日分享到此结束啦!!

学无止境 5126

基于深度学习的垃圾邮件识别

垃圾邮件的大量存在严重威胁着电子邮件系统的安全和效率。基于深度学习的垃圾邮件识别技术已经成为目前最有效的解决方案之一。本文将详细介绍使用深度学习技术进行垃圾邮件识别的方法,并提供相应的代码实现。 随着电子邮件的广泛应用,垃圾邮件的数量不断增加,传统的规则和统计方法已经无法满足对垃圾邮件进行准确识别的需求。深度学习技术以其强大的模式识别能力和自动特征提取能力成为解决垃圾邮件识别难题的有效工具。

一键难忘的博客 1093

(转)nginx在CDN加速之后,获取用户真实IP做并发访问限制的方法 | 张戈博客

文章目录 一、普通配置 二、CDN之后 三、echo模块 最近一直在帮一个购买了张戈博客付费服务的朋友做网站防护,为了简单抵挡一下竞争对手的DDoS攻击,他给网站开启了Incapsula的免费CDN服务。 开启CDN之后,我之前给他写的Shell防护脚本也就宣告无效了,因为不管是正常访问还是攻击访问,脚本拿到的IP都是CDN节点的,而我不可能把CDN的节点I...

weixin_30853329的博客 151

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

nginx代理后,获取真实IP,做并发访问限制的方法(限流)

站点在运行时,为了防止DDoS 攻击、或内部接口调用造成的数据迸发,nginx提供了limit限流模块: HttpLimitZoneModule 限制同时并发访问的数量HttpLimitReqModule 限制访问数据,每秒内最多几个请求 一、普通配置: 什么叫普通配置? 普通配置就是针对【用户浏览器】→【网站服务器】这种常规模式的 nginx 配置。那么,如果我要对单 IP 做访问限制,绝大多数教程都是这样写的: ## 用户的 IP 地址 $binary_remote_addr 作为 Key,

完颜振江 2208

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Nginx网站使用CDN之后禁止用户真实IP限制访问方法

做过面向公网WEB运维的苦逼们肯定见识过各种恶意扫描、拉取、注入等图谋不轨行为吧?对于直接对外的WEB服务器,我们可以直接通过 iptables 、 Nginx 的deny指令或者是程序来ban掉这些恶意请求。 为了简单抵挡一下竞争对手的DDoS攻击,网站开启了Incapsula的免费CDN服务。 开启CDN之后,我之前给他写的Shell防护脚本也就宣告无效了,因为不管是正常访问还是攻击访问,脚本拿到的IP都是CDN节点的,而我不可能把CDN的节点IP也给禁用了,那就都不能访问了。 为了解决这个窘迫,我想到

云博客_资源宝分享 1887

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Nginx 限制单个IP的并发连接数【支持CDN 站点】

上次文章【Nginx 限制单个IP的并发连接数/速度来减缓垃圾蜘蛛爬虫采集】里介绍的办法明月感觉还是很有效的,特别是那些垃圾爬虫频繁抓取有一定的遏制,但是有一个不足的地方就是在站点开启 CDN 后因为有了 CDN 节点代理的存在,造成屏蔽的IP都是 CDN 节点的IP,误伤率太高了,明显的不科学呀! 在度娘、谷姐了一番后,明月终于还是找到了有效的办法来应对这个问题了(这里不得不吐槽一下网上“...

sh2018的博客 2393

iptables限制ip访问_(转)nginx代理后,获取真实IP,做并发访问限制的方法(限流)

站点在运行时,为了防止DDoS 攻击、或内部接口调用造成的数据迸发,nginx提供了limit限流模块:HttpLimitZoneModule 限制同时并发访问的数量HttpLimitReqModule 限制访问数据,每秒内最多几个请求一、普通配置:什么叫普通配置?普通配置就是针对【用户浏览器】→【网站服务器】这种常规模式的 nginx 配置。那么,如果我要对单 IP 做访问限制,绝大多数教程都是...

weixin_39667797的博客 741

nginx限制ip访问_Nginx网站使用CDN之后禁止用户真实IP访问的方法

一、真假难辨如何禁止访问,我们先了解下常见的3种网站访问模式:用户直接访问对外服务的普通网站浏览器 --> DNS解析 --> WEB数据处理 --> 数据吐到浏览器渲染展示用户访问使用了CDN的网站浏览器 --> DNS解析 --> CDN节点 --> WEB数据处理 --> 数据吐到浏览器渲染展示用户通过代理上网访问了我们的网站浏览器 --> 代...

weixin_39980841的博客 395

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

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

完颜振江 593

cdn背后nginx 设置获取真实IP及安全配置

1、获取cdn下用户的真实ip2、Nginx默认是不允许列出整个目录的,可以增加配置3、nginx默认是会在返回的数据包中显示版本号,隐藏ng版本号4、限制访问请求参数5、限制访问个别目录或文件后缀名。6、 限制IP的访问频率防御DDOS是一个系统工程,攻击花样多,防御的成本高瓶颈多,防御起来即被动又无奈。DDOS的特点是分布式,针对带宽和服务攻击,也就是四层流量攻击和七层应用攻击,相应的防御瓶颈四层在带宽,七层的多在架构的吞吐量。对于七层的应用攻击,我们还是可以做一些配置来防御的,例如前端是。

qq_44005305的博客 1415

CDN加速下如何识别和限制访问来源

处理真实IP

漠效的博客 1732
上一篇: DisCuz中php获取用户真实IP
下一篇: 利用百度api技术获取客户端IP地址经纬度及所在城市位置
SunsCheung
博客等级 码龄11年 30粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值