Nginx提供了多种限流方式,可以有效防止服务器过载或被恶意攻击。以下是几种常见的Nginx限流配置方法:
限制单个IP的并发连接数:
http {
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
limit_conn perip 10; # 每个IP最多10个并发连接
limit_conn perserver 100; # 整个服务器最多100个并发连接
}
}
限制单个IP的请求速率:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location / {
limit_req zone=one burst=20 nodelay;
# 平均每秒不超过10个请求
# 突发不超过20个请求
}
}
}
限制客户端下载速度:
location /download/ {
limit_rate 100k; # 限制速度为100KB/s
limit_rate_after 1m; # 下载超过1MB后开始限速
}
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 {
listen 80;
# 全局限制
limit_conn conn_limit 20;
location /api/ {
# API接口更严格的限制
limit_req zone=req_limit burst=10 nodelay;
limit_conn conn_limit 5;
}
location /static/ {
# 静态资源限速
limit_rate 500k;
}
}
}
geo $limit {
default 1;
10.0.0.0/8 0;
192.168.0.0/24 0;
}
map $limit $limit_key {
0 "";
1 $binary_remote_addr;
}
limit_req_zone $limit_key zone=req_limit:10m rate=5r/s;
zone=name:size
定义共享内存区域,用于存储状态rate
可以是 r/s(每秒请求数) 或 r/m(每分钟请求数)burst
允许突发请求数nodelay
表示不延迟处理突发请求,而是直接拒绝超过限制的请求以上配置可以根据实际需求组合使用,实现对Nginx服务器的全方位流量控制。