nginx的限速和限制并发连接数、限制请求数
-
限速(Rate Limiting): 限速允许你控制对服务器的请求速率,以防止过多的请求影响服务器性能。使用
limit_req_zone
指令定义一个共享内存区域,并在location
块中使用limit_req
指令来限制请求速率。示例配置:
nginxCopy codehttp {# 基于客户机的IP地址,每秒产生一个通行证(令牌通算法)limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {location / {# 限制请求速率,最多同时一个IP发起5次请求limit_req zone=one burst=5;# 限制文件下载速度为10k/slimit_rate 10k;# 当文件下载速度达到100k/s时限制他# 1m就是1M/slimit_rate_after 100k;...}} }
在上述配置中,每秒钟只允许一个请求,并且允许突发(
burst
)5个请求。这可以有效地限制请求的速率。请求报错状态码为503
-
限制并发连接数(Limit Connections): 通过限制同时连接到服务器的客户端数量,可以防止服务器过载。使用
limit_conn_zone
指令定义一个共享内存区域,并在location
块中使用limit_conn
指令来限制并发连接数。示例配置:
nginxCopy codehttp {# 名为addr,在内存中开辟一个10M的空间来存放用户的连接信息(基于IP)limit_conn_zone $binary_remote_addr zone=addr:10m;# 基于server(服务器域名)limit_conn_zone $server_name zone=perserver:10m;server {location / {# 限制一个IP地址只能同时发起5个并发链接limit_conn addr 5;# 限制一个月拟主机同时只能发起100个并发连接limit_conn perserver 100;...}} }
限制并发连接数,报错时的状态码为503
-
限制请求数(Limit Requests): 通过限制在一段时间内允许的最大请求数,可以防止服务器被大量请求过载。使用
limit_req_zone
指令定义一个共享内存区域,并在location
块中使用limit_req
指令来限制请求数。示例配置:
nginxCopy codehttp {limit_req_zone $binary_remote_addr zone=req_zone:10m rate=10r/s;server {location / {limit_req zone=req_zone burst=20 nodelay;...}} }
在上述配置中,每秒钟最多允许10个请求,允许突发(
burst
)20个请求,nodelay
参数表示不延迟处理请求。