您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 怎么设置Nginx限流
## 1. 什么是Nginx限流?
Nginx限流(Rate Limiting)是一种通过控制客户端请求速率来保护服务器资源的技术。它可以防止恶意攻击(如DDoS)、突发流量导致的服务器过载,以及确保公平的资源分配。Nginx提供了多种模块来实现限流功能,其中最常用的是`ngx_http_limit_req_module`(限制请求速率)和`ngx_http_limit_conn_module`(限制并发连接数)。
---
## 2. 为什么需要Nginx限流?
- **防止资源耗尽**:避免单个IP或用户占用过多服务器资源。
- **防御DDoS攻击**:限制恶意流量的请求速率。
- **提升服务稳定性**:平滑突发流量,避免服务器崩溃。
- **API保护**:防止API被滥用或过度调用。
---
## 3. Nginx限流的核心模块
### 3.1 `ngx_http_limit_req_module`(请求速率限制)
基于漏桶算法(Leaky Bucket)限制客户端请求的速率。
### 3.2 `ngx_http_limit_conn_module`(并发连接数限制)
限制同一时间来自单个IP的并发连接数。
---
## 4. 配置Nginx限流
### 4.1 请求速率限制(`limit_req`)
#### 步骤1:定义限流规则
在`http`块中定义一个共享内存区域(zone):
```nginx
http {
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
}
$binary_remote_addr
:以客户端IP作为限流键。zone=req_limit:10m
:分配10MB内存存储限流状态。rate=10r/s
:允许每秒10个请求。在server
或location
块中启用限流:
server {
location /api/ {
limit_req zone=req_limit burst=20 nodelay;
proxy_pass http://backend;
}
}
burst=20
:允许突发20个请求(超出速率的请求会排队)。nodelay
:立即处理突发请求,不延迟。limit_req_status 429; # 默认是503
limit_conn
)http {
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
}
server {
location /download/ {
limit_conn conn_limit 5; # 每个IP最多5个并发连接
}
}
可以组合多个限流规则,例如:
location /critical/ {
limit_req zone=req_limit burst=5;
limit_conn conn_limit 2;
}
通过map
模块排除特定IP:
http {
map $remote_addr $limit {
192.168.1.1 "";
default $binary_remote_addr;
}
limit_req_zone $limit zone=req_limit:10m rate=5r/s;
}
结合GeoIP模块:
geo $limited_country {
default 0;
CN 1;
}
limit_req_zone $binary_remote_addr zone=china_limit:10m rate=2r/s;
server {
if ($limited_country) {
limit_req zone=china_limit;
}
}
ab -n 100 -c 10 http://yourdomain.com/api/
wrk -t4 -c100 -d10s http://yourdomain.com/api/
查看被限流的请求是否返回429
或503
状态码。
burst
和rate
参数,或设置白名单。zone
内存大小(如10m
→5m
)。X-Forwarded-For
或使用更复杂的限流键(如用户ID)。Nginx限流是保护服务器资源的重要手段,通过合理配置limit_req
和limit_conn
模块,可以有效控制请求速率和并发连接数。实际应用中需根据业务场景调整参数,并通过监控持续优化。
提示:生产环境建议先在小范围测试限流规则,避免误伤正常流量。 “`
(全文约1000字)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。