前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx 限流 配置

Nginx 限流 配置

作者头像
收心
发布2022-01-14 09:45:46
6850
发布2022-01-14 09:45:46
举报
文章被收录于专栏:Java实战博客

为什么要Nginx限流? 我们都知道Nginx并发性很好,但是我们后台的Web服务器性能对比Nginx的并发来说,就很拉跨了。为了更好的保护后台应用,也是为了防止一些恶意攻击。我们就需要使用Nginx限流技术。

说到Nginx限流,我们需要了解到Nginx的限流方案。

  • 一 是控制速率
  • 二 是控制并发连接数

两种方式的解决方案。

控制速率,即每s允许多少请求通过

控制并发连接数,即允许多少并发量的请求通过

具体配置

控制速率之采用漏桶算法,其他方式 需要单独研究

http块 加入

代码语言:javascript
复制
 # 限流设置 ,binary_remote_addr:根据请求IP进行限流,contentRateLimit:缓存空间名称
    # 10m:缓存空间,rate=2r/s:每秒允许有2个请求被处理
    limit_req_zone $binary_remote_addr zone=contentRateLimit:10m rate=2r/s;

server 的 local 加入

代码语言:javascript
复制
            # 使用限流配置
            limit_req zone=contentRateLimit;

配置说明:

代码语言:javascript
复制
binary_remote_addr 是一种key,表示基于 remote_addr(客户端IP) 来做限流,binary_ 的目的是压缩内存占用量。
zone:定义共享内存区来存储访问信息, contentRateLimit:10m 表示一个大小为10M,名字为contentRateLimit的内存区域。1M能存储16000 IP地址的访问信息,10M可以存储16W IP地址访问信息。
rate 用于设置最大访问速率,rate=10r/s 表示每秒最多处理10个请求。Nginx 实际上以毫秒为粒度来跟踪请求信息,因此 10r/s 实际上是限制:每100毫秒处理一个请求。这意味着,自上一个请求处理完后,若后续100毫秒内又有请求到达,将拒绝处理该请求.我们这里设置成2 方便测试。

突发流量处理 加入burst

代码语言:javascript
复制
 limit_req zone=contentRateLimit burst=4;

含义

burst=4,若同时有4个请求到达,Nginx 会处理第一个请求,剩余3个请求将放入队列,然后每隔500ms从队列中获取一个请求进行处理。若请求数大于4,将拒绝处理多余的请求,直接返回503.

一般加入 burst 就需要加上 nodelay 意为:不延迟

代码语言:javascript
复制
  # 使用限流配置contentRateLimit ,nodelay 不延迟
        limit_req zone=contentRateLimit burst=4 nodelay;

针对IP 爆破进行限制

代码语言:javascript
复制
Http块加入
limit_conn_zone $binary_remote_addr zone=addr:10m;  表示限制根据用户的IP地址来显示,设置存储地址为的内存大小10M

local块中加入
limit_conn addr 2;   表示 同一个地址只允许连接2次。

额外知识:

代码语言:javascript
复制
# 存储个人请求IP的限流容量
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m; 
server {  
    listen       80;
    server_name  localhost;
    charset utf-8;
    location / {
        limit_conn perip 10; #单个客户端ip与服务器的连接数.
        limit_conn perserver 100; #限制与服务器的总连接数
        root   html;
        index  index.html index.htm;
    }
}

从宝塔拿下来的配置:

代码语言:javascript
复制
    # 并发限制
    limit_conn perserver 300;
    # 单IP限制
    limit_conn perip 25;
    # 流量限制
    limit_rate 512k;

特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 具体配置
  • 针对IP 爆破进行限制
  • 从宝塔拿下来的配置:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档