`
gelongmei
  • 浏览: 209650 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Nginx中如何限制某个IP同一时间段的访问次数

 
阅读更多
如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候。其中CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包, 造成对方服务器资源耗尽,一直到宕机崩溃。

   cc攻击一般就是使用有限的ip数对服务器频繁发送数据来达到攻击的目的,nginx可以通过HttpLimitReqModul和HttpLimitZoneModule配置来限制ip在同一时间段的访问次数来防cc攻击。

HttpLimitReqModul用来限制连单位时间内连接数的模块,使用limit_req_zone和limit_req指令配合使用来达到限制。一旦并发连接超过指定数量,就会返回503错误。

   HttpLimitConnModul用来限制单个ip的并发连接数,使用limit_zone和limit_conn指令

这两个模块的区别前一个是对一段时间内的连接数限制,后者是对同一时刻的连接数限制

HttpLimitReqModul 限制某一段时间内同一ip访问数实例

http{
    ...
    #定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,
    #以$binary_remote_addr 为key,限制平均每秒的请求为20个,
    #1M能存储16000个状态,rete的值必须为整数,
    #如果限制两秒钟一个请求,可以设置成30r/m
    limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;
    ...
    server{
        ...
        location {
            ...
            #限制每ip每秒不超过20个请求,漏桶数burst为5
            #brust的意思就是,如果第1秒、2,3,4秒请求为19个,
            #第5秒的请求为25个是被允许的。
            #但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。
            #nodelay,如果不设置该选项,严格使用平均速率限制请求数,
            #第1秒25个请求时,5个请求放到第2秒执行,
            #设置nodelay,25个请求将在第1秒执行。
            limit_req zone=allips burst=5 nodelay;
            ...
        }
        ...
    }
    ...
}
HttpLimitZoneModule 限制并发连接数实例
http://www.abc3210.com/2013/web_04/82.shtml
limit_zone只能定义在http作用域,limit_conn可以定义在http server location作用域

http{
    ...
    #定义一个名为one的limit_zone,大小10M内存来存储session,
    #以$binary_remote_addr 为key
    #nginx 1.18以后用limit_conn_zone替换了limit_conn
    #且只能放在http作用域
    limit_conn_zone   one  $binary_remote_addr  10m;
    ...
    server{
        ...
        location {
            ...
           limit_conn one 20;          #连接数限制
           #带宽限制,对单个连接限数,如果一个ip两个连接,就是500x2k
           limit_rate 500k;        
            ...
        }
        ...
    }
    ...
}



另:
这里我们介绍了2种言法一个是利用limit_conn来限制连接数据与一个单连接数据,另一个使用了ngx_http_limit_conn_module限制连接与限制流量。



limit_conn
语法:limit_conn zone_name the_size
作用域:http, server, location
代码如下 复制代码
limit_zone   one  $binary_remote_addr  10m;
server {
location /download/ {
limit_conn   one  1;
}
定义一个叫“one”的记录区,总容量为 10M,以变量 $binary_remote_addr 作为会话的判断基准(即一个地址一个会话)。限制 /download/ 目录下,一个会话只能进行一个连接。简单点,就是限制 /download/ 目录下,一个IP只能发起一个连接,多过一个,一律503。
Nginx限制流量/限制带宽?
nginx可以通过HTTPLimitZoneModule和HTTPCoreModule两个组件来对目录进行限速。
代码如下 复制代码
http {
limit_zone   one  $binary_remote_addr  10m;
server {
location /download/ {
limit_conn  ctohome_zone 2;
limit_rate 300k;
}
}
}
limit_zone,是针对每个IP定义一个存储session状态的容器。这个示例中定义了一个10m的容器,按照32bytes/session,可以处理320000个session。
limit_conn ctohome_zone 2;
限制每个IP只能发起2个并发连接。
limit_rate 300k;
对每个连接限速300k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate×2。
ngx_http_limit_conn_module
ngx_http_limit_conn_module 模块可以按照定义的键限定每个键值的连接数。特别的,可以设定单一 IP 来源的连接数。

并不是所有的连接都会被模块计数;只有那些正在被处理的请求(这些请求的头信息已被完全读入)所在的连接才会被计数。
配置范例
代码如下 复制代码
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
server {
...
location /download/ {
limit_conn addr 1;
}
指令
语法: limit_conn zone number;
默认值: —
上下文: http, server, location
指定一块已经设定的共享内存空间,以及每个给定键值的最大连接数。当连接数超过最大连接数时,服务器将会返回 503 (Service Temporarily Unavailable) 错误。比如,如下配置
代码如下 复制代码
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location /download/ {
limit_conn addr 1;
}
表示,同一 IP 同一时间只允许有一个连接。
当多个 limit_conn 指令被配置时,所有的连接数限制都会生效。比如,下面配置不仅会限制单一IP来源的连接数,同时也会限制单一虚拟服务器的总连接数:
代码如下 复制代码
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
...
limit_conn perip 10;
limit_conn perserver 100;
}
如果当前配置层级没有limit_conn指令,将会从更高层级继承连接限制配置。
语法: limit_conn_log_level info | notice | warn | error;
默认值:
limit_conn_log_level error;
上下文: http, server, location
这个指令出现在版本 0.8.18.
指定当连接数超过设定的最大连接数,服务器限制连接时的日志等级。
语法: limit_conn_zone $variable zone=name:size;
默认值: —
上下文: http
设定保存各个键的状态的共享内存空间的参数。键的状态中保存了当前连接数。键的值可以是特定变量的任何非空值(空值将不会被考虑)。 使用范例:
limit_conn_zone $binary_remote_addr zone=addr:10m;
这里,设置客户端的IP地址作为键。注意,这里使用的是$binary_remote_addr变量,而不是$remote_addr变量。$remote_addr变量的长度为7字节到15字节不等,而存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。而$binary_remote_addr变量的长度是固定的4字节,存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。一兆字节的共享内存空间可以保存3.2万个32位的状态,1.6万个64位的状态。如果共享内存空间被耗尽,服务器将会对后续所有的请求返回 503 (Service Temporarily Unavailable) 错误。
语法: limit_zone name $variable size;
默认值: —
上下文: http
这条指令在 1.1.8 版本中已经被废弃,应该使用等效的limit_conn_zone指令。该指令的语法也有变化:
limit_conn_zone $variable zone=name:size;
分享到:
评论

相关推荐

    Nginx限制某个IP同一时间段的访问次数和请求数示例代码

    ngx_http_limit_conn_module 和 ngx_http_limit_req_module 是 Nginx 中用于控制访问频率和并发连接数的两个核心模块,它们可以帮助管理员有效地管理服务器资源,防止 DDoS 攻击或恶意用户频繁请求带来的服务器压力...

    Nginx服务器限制IP访问的各种情况全解析

    限制某个IP同一时间段... cc攻击一般就是使用有限的ip数对服务器频繁发送数据来达到攻击的目的,nginx可以通过HttpLimitReqModul和HttpLimitZoneModule配置来限制ip在同一时间段的访问次数来防cc攻击。 HttpLimitReqM

    nginx 限制ip、并发量、连接数等配置

    在Nginx配置文件(通常是`/etc/nginx/nginx.conf`或`/usr/local/nginx/conf/nginx.conf`)中,可以使用`allow`和`deny`指令来允许或禁止特定IP或IP段的访问。以下是一个示例: ```nginx server { listen 80; ...

    详解nginx同一端口监听多个域名和同时监听http与https

    针对这两个需求,本文将详细介绍如何在Nginx中实现。 首先,关于同一端口监听多个域名。这是一个非常实用的功能,尤其是在公网IP资源稀缺的当下。通过使用Nginx的虚拟主机功能,可以在同一个IP地址和端口上,通过...

    nginx配置限制同一个ip的访问频率方法

    1、在nginx.conf里的http{}里加上如下代码: limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name ...$binary_remote_addr是限制同一客户端ip地址; $server_name是限制同一server最

    nginx ip 过滤访问限制

    python脚本 从nginx的访问log,获取访问IP,记录到redis,根据IP访问数量判断是否存在安全问题,记录不正常IP,(写入到防火墙过滤-待完成)

    Nginx服务器限制访问速度的配置方法

    投入运营会有限制附件下限速度,限制每个用户的访问速度,限制每个IP的链接速度等需求。 刚遇到一个Bug在网络很卡的情况下才能重现,本地调试访问本机速度太快,配置Nginx成功达到限速目的,在此分享出来。 配置简单...

    Nginx限制IP访问某些页面的操作

    要限制某个IP的访问频率,可以使用`limit_req`模块。例如,限制每个IP每秒只能访问一次: ```nginx location / { limit_req zone=one burst=2 nodelay; } limit_req_zone $binary_remote_addr zone=one:10m ...

    docker_nginx:带有nginx的Docker可以在同一服务器上维护多个Web应用程序或站点

    带有nginx的Docker可以在同一服务器上维护多个Web应用程序或站点 描述 该场景如下: 一台服务器 在Docker容器中运行的几个站点/ Web应用程序 两个网络: 仅具有Nginx代理服务器的前端网络 只能通过nginx访问的...

    nginx禁止某个IP访问站点的设置方法

    首先建立下面的配置文件放在nginx的conf目录下面,... blocksip.conf:的格式还有许多种,可以配置只允许的IP访问或者IP段访问: deny IP; allow IP; # block all ips deny all; # allow all ips allow all; 其中网段的

    linux服务器(nginx或者apache)限制IP访问.docx

    Linux 服务器限制 IP 访问是指通过配置 Nginx 或 Apache 服务器,屏蔽或限制特定的 IP 地址访问服务器,以防止垃圾评论、攻击或恶意访问。 Nginx 环境下的 IP 限制 在 Nginx 环境下,可以创建一个名为 denyip.conf...

    Nginx如何封禁IP和IP段的实现

    本文将详细介绍如何在Nginx中封禁特定的IP地址和IP段,以及如何自定义403错误页面。 首先,了解Nginx中的访问控制模块是实现IP封禁功能的关键。通过配置文件中的ngx_http_access_module模块,可以允许或禁止特定的...

    nginx与apache限制ip连接数和带宽方法.docx

    例如,在 Nginx 的配置文件中添加以下代码可以限制 IP 连接数为 20: ```nginx http { ... limit_zone $binary_remote_addr 10m; server { ... location / { limit_conn one 20; limit_rate 500k; ... } }...

    详解NGINX如何统计网站的PV、UV、独立IP

    Nginx: PV、UV、独立IP 做网站的都知道,平常经常要查询下网站PV、UV等网站的访问数据,当然如果网站做了CDN的话,nginx本地的日志就没什么意义了,下面就对nginx网站的日志访问数据做下统计; 概念: UV(Unique ...

    nginx防并发限制ip连接数等配置.zip

    在提供的压缩包中,`nginx.exe`是Nginx服务器的可执行文件,`conf`目录包含Nginx的配置文件,如`nginx.conf`,这是主要的配置文件,通常需要在这里进行上述的防并发限制配置。`docs`目录可能包含Nginx的文档和帮助...

    Nginx中http请求处理过程

    Nginx 需要监听某个 IP 地址和端口,以便接受来自客户端的请求。 2.2 phases[NGX_HTTP_LOG_PHASE + 1] 的初始化 phases 是 Nginx 中的一个数组,用于存储 HTTP 请求处理过程中的各个阶段。在初始化时,Nginx 会将 ...

    nginx做ip限制.txt

    其中,通过配置文件对特定IP地址或IP段进行访问限制是一项常用且有效的手段。 #### 配置示例解析 ##### 示例一:基础IP限制配置 ```nginx server { # 允许指定IP访问 allow 10.57.22.172; # 拒绝所有其他IP访问...

    NGINX实现一个域名访问多个项目1

    标题中的"NGINX实现一个域名访问多个项目1"是指利用Nginx服务器的配置能力,让同一个域名能够根据不同的URL路径指向不同的应用或项目。描述中提到,这是为了解决在一个域名下部署多个项目的问题,避免为每个项目单独...

Global site tag (gtag.js) - Google Analytics