nginx限制ip访问频率的实现示例

 更新时间:2023年07月31日 11:02:53   作者:csdncjh  
Nginx通过limit_conn_zone 和 limit_req_zone对同一个IP地址进行限速限流,本文主要介绍了nginx限制ip访问频率的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Nginx通过limit_conn_zone 和 limit_req_zone对同一个IP地址进行限速限流,可防止DDOS/CC和flood攻击

limit_conn_zone是限制同一个IP的连接数。而一旦连接建立之后 。客户端就会通过这次的连接发送多次请求,那么在此期间的请求频率和速度进行限制就需要limit_req_zone

limit_conn_zone配置

连接数限制,相当于限制了nginx与客户端之间的管道个数

http区块的配置:

limit_conn_zone $binary_remote_address zone=asia; 10m;
# 这个配置的意思就是定义一个名为 asia的limit_conn_zone用来存储session 
# 内存为10m大小

server区块配置如下;

limit_conn asia 2;
# 单个客户端ip与服务器的连接数

limit_req_zone配置:

请求频率 限制,相当于限制了nginx与客户端管道之间水的流速

http区块配置:

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

server区块配置:

limit_req_zone=one burst=10;

burst漏桶原理

rate=5r/s :从单一IP地址每秒5个请求是允许的

burst=10:允许超过频率rate限制的请求数不多于10个

当每秒请求超过5个 但是在10个以下,也就是每秒请求的数量在5-10之间的请求将被延时delay,虽然没有明确的定义delay,默认就是延时的,因为漏桶其实类似队列Queue或消息系统,

当每秒请求数量超过最低速率每5个请求时,多余的请求将会进入这个队列排队等待。如同机场安检,一次放入5个 。多余5个 。小于10个排队等待

注:这里的队列或者漏桶是以秒为单位的

如果每秒的请求超过10个 ,也就是超出了burst的限制 。那么也不用排队,而是直接回绝返回 503错误(Service Temporarily Unavailable 服务暂时不可用)

如果我们使用nodelay:

limit_req zone=one burst=10 nodelay;

这表示,如果每秒请求在5-10个之间会尽快完成,也就是以每秒10个速率完成,超过每秒10+5也就是15个就立即返回503,因此nodelay实际没有了延时,也就取消了队列等候过渡。

在Twitter Facebook LinkedIn这类大型网站中,由于访问量巨大,通常会在http服务器后面放置一个消息队列,比如Apache Kafka,用来排队大量请求,因此,对于中小型网站,推荐使用delay方案,而不要写明nodelay,但是网络上其他各种文章几乎都是推荐nodelay.

防止POST攻击:

上面总结了三个限速限流设置方式,还有一种能够防止POST攻击,黑客通过发出大量POST请求对网站各种URL进行试探攻击,可以通过下面方式防止

http {
... #nginx.conf 配置
#如果请求类型是POST 将ip地址映射到 $limit 值
map $request_method $limit {
default "";
POST $binary_remote_addr;
}
#创造10mb zone内存存储二进制ip
limit_req_zone $limit zone=my_zone:10m rate=1r/s;
}

带宽限制:

limit_rate 50k;
limit_rate_after 500k;

当下载的大小超过500k以后,以每秒50K速率限制。

示例

location /flv/ {
    flv;
    limit_rate_after 500k;
    limit_rate       50k;
}

来源 

Nginx 限制ip的访问频率 (qq.com)

到此这篇关于nginx限制ip访问频率的实现示例的文章就介绍到这了,更多相关nginx限制ip访问频率内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于nginx报错405 not allowed解决方法总结

    关于nginx报错405 not allowed解决方法总结

    这篇文章主要给大家介绍了关于nginx报错405 not allowed解决方法的相关资料,nginx遇到post请求静态文件会得到405错误,文中通过代码介绍的非常详细,也给出了推荐方法,需要的朋友可以参考下
    2023-10-10
  • Nginx CertBot配置HTTPS泛域名证书Debian及常见问题

    Nginx CertBot配置HTTPS泛域名证书Debian及常见问题

    这篇文章主要介绍了Nginx CertBot配置HTTPS泛域名证书Debian及常见问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Nginx配置支持WebSocket功能详解

    Nginx配置支持WebSocket功能详解

    Nginx配置支持WebSocket功能需要添加特定配置,网上通用配置只能支持ws请求,而既支持http又支持ws的配置中,使用map$http_upgrade$connection_upgrade块来设置Connection头的值,并指定使用HTTP/1.1版本以保持连接打开,确保Nginx版本是1.3或更高
    2024-11-11
  • Nginx本地目录映射实现代码实例

    Nginx本地目录映射实现代码实例

    这篇文章主要介绍了Nginx本地目录映射实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 详解nginx过滤url实现前台js的配置问题

    详解nginx过滤url实现前台js的配置问题

    本篇文章主要介绍了nginx过滤url实现前台js的配置问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Nginx 部署的虚拟主机使用 Let's Encrypt 加密 https的方法

    Nginx 部署的虚拟主机使用 Let's Encrypt 加密 https的方法

    HTTPS 是现在网站的标配了,很多服务都是必须使用 https,如果你不使用的话,浏览器可能就不会对你非常友好了,这篇文章主要介绍了Nginx 部署的虚拟主机如何使用 Let's Encrypt 来进行加密 https,需要的朋友可以参考下
    2022-07-07
  • nginx地址重写、反向代理方式

    nginx地址重写、反向代理方式

    这篇文章主要介绍了nginx地址重写、反向代理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Nginx 路由转发和反向代理location配置实现

    Nginx 路由转发和反向代理location配置实现

    本文主要介绍了Nginx 路由转发和反向代理location配置实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 详解Nginx服务器中map模块的配置与使用

    详解Nginx服务器中map模块的配置与使用

    这篇文章主要介绍了Nginx服务器中map模块的配置与使用,文中同时给出了ngx_http_map_module模块的map命令用于制作服务器限速白名单的示例,需要的朋友可以参考下
    2016-01-01
  • nginx 虚拟主机设置实例(多网站配置)

    nginx 虚拟主机设置实例(多网站配置)

    Nginx 虚拟主机设置一例,主要是针对虚拟主机的设置,多网站配置方法,需要的朋友可以参考下
    2013-02-02

最新评论