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/s limit_rate 10k; # 当文件下载速度达到100k/s时限制他 # 1m就是1M/s limit_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
参数表示不延迟处理请求。