Nginx连接限制模块 – ngx_http_limit_conn_module
01.nginx的连接限制模块用于限制单个key(关键字)的最大连接。
- 连接限制模块的工作原理:
- 通过limit_conn_zone配置项,在http配置段中定义一个共享内存区域,用来存储不同key的信息。
- 通过limit_conn配置项,在http,server或location配置段中,指定一个对应的共享内存区域。
- 在指定的共享内存区域中,根据当前计算出的key的信息来限制客户端请求的最大连接数。
- 请求限制模块的配置项包括:
- limit_conn,指定一个共享内存区域,并且设置连接限制的参数,其格式为:
limit_conn zone number;
- zone,自定义的内存共享区域的名称,对应limit_conn_zone中配置的zone。
- number,最大连接数。
- limit_conn_dry_run;,是否开启干跑模式;如果开启,连接限制的不会生效,但共享内存区域的key值会增加。
- limit_conn_dry_run的值为on或者off,默认为off。
- limit_conn_dry_run可以配置在http,server或location配置段中。
- limit_conn_log_level,设置当请求被拒绝时,该日志对应的日志级别。
- limit_conn_log_level的值为info,notice,warn和error;默认为error。
- limit_conn_log_level可以配置在http,server或location配置段中。
- limit_conn_status,当请求被拒绝时,返回的状态码。
- limit_conn_status的默认值为503。
- limit_conn_status可以配置在http,server或location配置段中。
- limit_conn_zone,设置共享缓存区域的属性,其格式为:
limit_conn_zone key zone=name:size;
- key,key的名称,通过变量来获取;例如$binary_remote_addr表示以客户端地址的二进制为key。
- zone,自定义的内存共享区域的名称,对应limit_conn中配置的zone。
- size,缓存取的大小,单位通常为k,m或者g。
- limit_conn,指定一个共享内存区域,并且设置连接限制的参数,其格式为:
02.nginx的请求限制模块的配置示例:
- vim /opt/Apps/nginx/conf/nginx.conf,在主配置文件的http段中添加如下配置:
limit_conn_zone $binary_remote_addr zone=remote_addr_conn:10m;
- 添加一个名称为remote_addr_conn的共享内存区域,其大小为10m;它以客户端的ip地址的二进制为key。
- vim /opt/Apps/nginx/conf/conf.d/main.conf,修改为如下配置:
server {
listen 80;
server_name nginx.test.com;
error_log logs/nginx_test_error.log error;
access_log logs/nginx_test_access.log main gzip flush=5m;
location / {
root html/main;
index index.html index.htm index.php;
limit_conn remote_addr_conn 1;
}
}
- 指定名称为remote_addr_req的共享内存区域,其缓冲队列的长度为5个请求,一旦超过频率和缓冲的限制则立刻返回503。
- /opt/Apps/nginx/sbin/nginx -s reload,重新加载配置文件。
- ab -c 100 -n 100 http://nginx.test.com/time.jpg,使用ab工具对站点进行测试(可以测试一个较大的文件):
- 由于文件体积较大,在一个连接没有完成请求之前,另一个同样的请求会被拒绝。
- 失败的请求以error的日志级别输出。
文档更新时间: 2020-03-11 19:49 作者:闻骏