控制nginx并发链接数量和客户端请求nginx的速率
Posted 我的城市没有海
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了控制nginx并发链接数量和客户端请求nginx的速率相关的知识,希望对你有一定的参考价值。
一、控制nginx并发链接数
ngx_http_limit_conn_module这个模块用于限制每个定义的key值的链接数,特别是单IP的链接数。
不是所有的链接数都会被计数,一个符合计数要求的连接数是整个请求头已经被读取的链接数。
控制nginx并发链接数量参数的说明如下:
1)、limit_conn_zone参数: 语法: limit_conn_zone key zone=name:size; 上下文http 用于设置共享内存区域,key可以是字符串、 nginx自带变量或前两个组合,如$binary_remote_addr、$server_name。name为内存区域的名称,size为内存区域的大小。 2) limit_conn参数: 语法: limit_conn_zone_number; 上下文httpserverlocation 用于指定key设置最大连接数。当超过最大连接数时,服务器会返回503( Service Temporarily Unavailable)错误。
1)、限制单IP并发链接数
nginx的配置文件如下:
[[email protected] conf]# cat nginx.conf worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000; worker_rlimit_nofile 65535; user www; events { use epoll; worker_connections 20480; } http { include mime.types; default_type application/octet-stream; sendfile on; server_tokens off; keepalive_timeout 65; limit_conn_zone $binary_remote_addr zone=addr:10m; ... ... server { listen 80; server_name www.dmtest.com; location / { root html; index index.php index.html index.htm; limit_conn addr 1; #限制单IP的并发链接为1 } }
2)、限制虚拟主机总链接数
不仅可以限制单IP的并发链接数,还可以限制虚拟主机总链接数,甚至可以对两者同时限制,nginx的配置文件如下:
[[email protected] conf]# cat nginx.conf worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000; worker_rlimit_nofile 65535; user www; events { use epoll; worker_connections 20480; } http { include mime.types; default_type application/octet-stream; sendfile on; server_tokens off; keepalive_timeout 65; limit_conn_zone $binary_remote_addr zone=addr:10m; limit_conn_zone $binary_name zone=perserver:10m; ... ... server { listen 80; server_name www.dmtest.com; location / { root html; index index.php index.html index.htm; limit_conn perserver 1; #限制虚拟主机连接数为2 } }
二、控制客户端请求nginx的速率
ngx_http_limit_req_module模块用于限制每个IP访问每个定义key的请求速率。 limit_req_zone参数说明如下: 语法: limit_req_zone key zone=name:size rate=rate; 上下文:http 用于设置共享内存区域,key可以是字符串、 nginx自带变量或前两个组合,如$binary_remote_addr。 name为内存区域的名称,size为内存区域的大小,rate为速率,单位为r/s,每秒一个请求。 limit_req参数说明如下: 语法: limit_req zone=name [burst=number] [nodelay]; 上下文:http、 server、 location 这里运用了令牌桶原理, burst=num,一共有num块令牌,令牌发完后,多出来的那些请求就会返回503。 换句话说,一个银行,只有一个营业员,银行很小,等候室只有5个人的位置。因此,营业员一个时刻只能为一个人提供服务,剩下的不超过5个人可以在银行内等待, 超出的人不提供服务,直接返回503。 nodelay默认在不超过 burst值的前提下会排队等待处理,如果使用此参数,就会处理完num+1次请求,剩余的请求都视为超时,返回503。
配置如下:
[[email protected] conf]# cat nginx.conf worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000; worker_rlimit_nofile 65535; user www; events { use epoll; worker_connections 20480; } http { include mime.types; default_type application/octet-stream; sendfile on; server_tokens off; keepalive_timeout 65; limit_conn_zone $binary_remote_addr zone=addr:10m rate=1r/s; #以请求的客户端IP作为key值,内存区域命名为noe,分配10m内存空间,访问速率限制为1秒1次请求(request) ... ... server { listen 80; server_name www.dmtest.com; location / { root html; index index.php index.html index.htm; limit_conn perserver 1; #使用前面定义的名为one的内存空间,队列值为5,即可以有5个请求排队等待 } }
以上是关于控制nginx并发链接数量和客户端请求nginx的速率的主要内容,如果未能解决你的问题,请参考以下文章
Nginx优化防爬虫 限制http请求方法 CDN网页加速 架构优化 监牢模式 控制并发量以及客户端请求速率