控制nginx并发链接数量和客户端请求nginx的速率
一、控制nginx并发链接数
ngx_http_limit_conn_module这个模块用于限制每个定义的key值的链接数,特别是单IP的链接数。
不是所有的链接数都会被计数,一个符合计数要求的连接数是整个请求头已经被读取的链接数。
控制nginx并发链接数量参数的说明如下:
1 2 3 4 5 6 7 8 9 | 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; 上下文http\server\location 用于指定key设置最大连接数。当超过最大连接数时,服务器会返回503( Service Temporarily Unavailable)错误。 |
1)、限制单IP并发链接数
nginx的配置文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | [root@nginx 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的配置文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | [root@nginx 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的速率
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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。 |
配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | [root@nginx 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个请求排队等待 } } |
******************************我也想难过的时候到海边走走,可是我的城市没有海。******************************
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY