Nginx提供了多种限速方式,可以有效控制客户端请求速率,防止服务器过载或被恶意攻击。以下是几种常见的Nginx限速配置方法:
http {
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
location /api/ {
limit_req zone=mylimit burst=20 nodelay;
proxy_pass http://backend;
}
}
}
limit_req_zone
定义限速区域
$binary_remote_addr
使用客户端IP作为识别键zone=mylimit:10m
创建名为mylimit的共享内存区,大小10MBrate=10r/s
限制每秒10个请求limit_req
应用限速规则
burst=20
允许突发20个请求nodelay
对突发请求不延迟处理http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location /download/ {
limit_conn addr 5;
# 其他配置...
}
}
}
limit_conn_zone
定义连接限制区域limit_conn addr 5
限制每个IP最多5个并发连接location /download/ {
limit_rate 500k; # 限制每个连接带宽为500KB/s
limit_rate_after 10m; # 前10MB不限速
}
http {
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
location /api/ {
limit_req zone=req_limit burst=10 nodelay;
limit_conn conn_limit 10;
limit_rate 100k;
# 其他配置...
}
}
}
map $slow $limit {
1 $binary_remote_addr;
0 "";
}
limit_req_zone $limit zone=slow:10m rate=10r/s;
server {
location / {
# 根据条件设置$slow变量
set $slow 0;
if ($http_user_agent ~* "Googlebot|bingbot") {
set $slow 1;
}
limit_req zone=slow burst=5 nodelay;
}
}
以上配置可以根据实际需求组合使用,实现精细化的流量控制策略。