上一篇: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/