对于Nginx接入层限流通常可以使用 Nginx自带的两个模块:
1、连接数限流模块:ngx_http_limit_conn_module
可以对某个key,如按照IP、域名对应的总的网络连接数进行限流。
- 示例 1.1 :按照IP限制并发连接数限流
http {
...
limit_conn_zone $binary_remote_addr zone=perip:10m; #配置限流key与其存放信息的共享内存大小($binary_remote_addr为IP限流,$server_name为域名限流)
limit_conn_log_level error; #配置被限流后日志级别
limit_conn_status 503; #配置被限流后返回的状态码
...
server {
...
#在要限流的location中添加限流逻辑
location /
{
limit_conn perip 2; #存放key和计数器的共享内存区域 和 指定key的最大连接数
}
}
...
access_log /www/wwwlogs/oyhdo.com.log;
error_log /www/wwwlogs/oyhdo.com.error.log;
}
以上配置表示:限制每个IP最大并发连接数为2。
ab测试:并发数5,总请求数5,命令如下:
ab -n 5 -c 5 https://oyhdo.com/