官方文档:http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
模板: ngx_http_limit_conn_module
简介模板:该ngx_http_limit_conn_module模块用于限制每个已定义密钥的连接数,特别是来自单个IP地址的连接数。 并非所有连接都被计数。仅当连接具有服务器正在处理的请求并且已经读取了整个请求标头时,才对连接进行计数。
(只有当服务器正在处理请求并且已经读取了整个请求标头时,才会计算连接)
一、设置共享内存区域和给定键值的最大允许连接数
句法: limit_conn_zone key zone=name:size;
默认: -
内容: http
在HTTP / 2和SPDY中,每个并发请求都被视为一个单独的连接。
HTTP1.0 | TCP不能复用 |
HTTP1.1 | 顺序性TCP复用 |
HTTP2.0 | 多路复用TCP复用 |
二、为服务器限制连接数的情况设置所需的日志记录级别。
句法: limit_conn_log_level info | notice | warn | error;
默认: limit_conn_log_level error;
内容: http,server,location
该指令出现在版本0.8.18中。
三、设置以响应被拒绝的请求返回的状态码。
句法: limit_conn_status code;
默认: limit_conn_status 503;
内容: http,server,location
该指令出现在1.3.15版中。
四、配置文件
http {
limit_conn_log_level error; #连接的错误日志级别
limit_conn_status 503; #连接错误返回的状态码
limit_conn_zone $binary_remote_addr zone=one:10m; #设置共享内存区域和给定键值的最大并发连接数 “none”为存储区名($binary_remote_addr = 用二进制来储存客户端的地址,1m 可以储存 32000 个并发会话 #在HTTP/2和SPDY中,每个并发请求被视为单独的连接.
limit_conn_zone $server_name zone=perserver:10m; #设置共享内存区域和给定键值的最大允许—— (服务器连接数)
server {
listen 80 default_server;
server_name _;
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
location / {
limit_conn one 1; #最大并发连接数,每个客户端IP与服务器的连接也算一个连接数(每次只允许一个IP地址连接一次。)
limit_conn perserver 1; #服务器总连接数不得超过个数,超过请求的会被拒绝(返回状态码503)
}
重点思路哇(个人理解,如有错请指出来):
limit_conn_zone $binary_remote_addr zone=one:10m 定义限制客户端IP发起的请求数量(只要是个请求就算一个连接)
limit_conn_zone $server_name zone=perserver:10m 定义服务器自己允许的总的建立连接数量
现在明白了吗,双重限制哇,只要服务器限制的连接数量到了限制量就不接受任何连接。 接下来就是自己定义需求咯
官方提示limit_conn_zone :
二、测试
1)需要工具:ab
安装软件包: yum install httpd-tools -y
2)测试命令: ab -c 5 -n 100 http://ip.cip.cc/
注解:-c :并发量 -n:请求总数 ip.cip.cc: 外网IP地址