一、语法
- limit_conn_module 连接频率限制模块
- limit_req_module 请求频率限制模块
(1) 连接限制语法
Syntax:limit_conn_zone key zone=name:size;
Default: --
Context: http
Syntax:limit_conn zone number;
Default:--
Context:http,server,location
(2) 请求限制语法
Syntax:limit_req_zone key zone=name:size rate=rate;
Default: --
Context: http
Syntax:limit_req zone=name [burst=numaber] [nodelay];
Default:--
Context: http,server,location
二、未对请求和连接做限制的压力测试
(1)yum install -y ab
安装压力测试工具ab
(2)ab -n 50 -c 20 http://192.168.122.1/test.html
手动压力测试,总共发起50个请求,并发数为20
以下为无任何配置下的压力测试结果,测试结果含义可参考这篇文章
测试结果.png三、对请求和连接做限制的压力测试
(1)vi /etc/nginx/conf.d/default.conf
打开 default.conf 文件并添加配置
limit_conn_zone $binary_remote_addr zone=conn_zone:1m;
释意 : $binary_remote_addr
和 remote_addr
都是指客户端地址,但是存储remote_addr
比存储$binary_remote_addr
会多十个字节,一个会话多十个字节,成千上万个会话就需要多出很多空间,故而使用$binary_remote_addr
。
1m指的是:申请的空间大小为1M
limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;
释意 :对于同一个remote_addr(客户端地址)过来的请求,限制每秒只允许发起一个请求
limit_conn conn_zone 1
释意 :连接限制,同一时刻,只允许一个ip连接
limit_req zone=req_zone burst=3 nodelay
释意 :请求限制, burst=3
,客户端超过了指定的请求速率后,遗留的三个请求释放到下一秒执行(即对客户端延迟响应), nodelay
:除了这3个请求外,其它超出的直接返回503(503:由于超载或停机维护,服务器目前无法使用)
(2)接下来,可将四条注释逐一取消进行测试
以下为请求限制的测试:
limit_conn_zone $binary_remote_addr zone=conn_zone:1m;
limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;
...
location / {
root /opt/app/code;
# limit_conn conn_zone 1;
# limit_req zone=req_zone burst=3 nodelay;
# limit_req zone=req_zone burst=3;
limit_req zone=req_zone;
index index.html index.htm;
}
...
查看错误日志 tail -f /var/log/nginx/error.log
网友评论