Bootstrap

Nginx04 -- 限流

上一篇:Nginx03 -- 代理转发_fengxianaa的博客-CSDN博客

1. 基本使用

nginx支持限流:Module ngx_http_limit_req_module

修改 yase.conf,定义限流规则

在 location 中使用规则

# 把配置放到对应的位置
limit_req_zone $binary_remote_addr zone=yase:10m rate=1r/s;
limit_req zone=one;

解释:

limit_req_zone:进行限流访问,防止用户恶意攻击刷爆服务器

$binary_remote_addr:访问者的ip地址

zone=yase:10m:标识内存中有一块内存区域大小为10m,并分配一个名称是yase,存储访问者的ip地址

一个IP地址4字节,1M能存储大约16000IP地址

rate=1r/s:限制每秒只处理一个请求

总结:同一个ip地址在每秒内只能访问1次,如果内存满了,且新的ip地址来访问,会清除内存中最少访问的IP,如果无法清除,请求直接失败

浏览器上1秒内,连续访问两次:http://yase.cn/

第一次成功

第二次失败

2. burst

缓冲区

上图配置:请求的频率超过rate=1r/s,新的请求会放到缓冲区中,但是缓冲区长度=1,只能放1个,其他的直接失败

在centos7上安装并发测试工具,执行: yum install httpd -y

查看版本

删除 lvbu.conf,ab测试时,需要访问:http://localhost:80/,但是lvbu.conf中也是监控80端口,会有冲突

重新加载nginx配置文件后,使用ab测试: ab -c 10 -n 10 http://localhost/

结果:

3. nodelay

不延期,立即处理请求

设置缓冲区后,第1个请求能够快速处理,但是第2个请求就只能延期1秒后处理,因为rate=1r/s;

nodelay:立即处理正在排队的请求

重新加载配置文件后,再次使用ab测试

但 nodelay 不会清空缓冲区,里面的请求还是每秒1一个的移除

配置 nodelay 后,每秒处理的请求数=rate+burst

4. 自定义错误页面

限流后,nginx返回的页面不合适

根据返回的状态码可以自定义页面

修改yase.conf

在 /home/web/yase 目录中新增一个 503.html

<CTYPE html>
  <html>
    <head>
      <meta charset="utf-8">
      <title>亚瑟</title>
    </head>
    <body>
      <h1>亚瑟的大宝剑提示您:限流了</h1>
    </body>
  </html>
注意:切记在保存html文件的时候一定要用utf-8编码

重新加载配置文件后,浏览器高频率访问:http://yase.cn/

;