常用的限流模块有:
1. limit_req模块:基于请求计数,限制每个客户端在给定时间内请求的数量。
2. limit_conn模块:基于连接数计数,限制每个客户端在给定时间内的连接数。
下面以limit_req模块为例进行说明,实现指定路径的限流。
1. 首先需要在Nginx配置文件中加载limit_req模块:
http {
...
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s; # 创建一个名为“api”的内存区域用于存储限流信息,限速为每秒10个请求
...
}
2. 在需要限流的location中使用limit_req模块:
location /api/ {
limit_req zone=api burst=20 nodelay; # 对以/api/开头的请求进行限流,允许20个请求突发,不延迟处理
...
}
其中,burst参数表示允许的突发请求数,nodelay参数表示如果超出限制立即返回503响应码,不延迟处理。
通过以上配置,Nginx会对以/api/开头的请求进行限流,每秒最多处理10个请求,超出限制将会返回503响应码。