帮助中心 > 关于云服务器 > 美国云服务器中Nginx如何限制IP访问频率
美国云服务器中Nginx如何限制IP访问频率
时间 : 2025-03-19 14:37:19
编辑 : Jtti

美国云服务器每秒受到数百次由同一个IP登录请求或者是接口刷取尝试,很容易让业务系统在几分钟内被拖垮。Nginx作为流量的入口,内置防护机制能够有效精准切断异常请求流量。下面为大家详细解读Nginx是如何在美国云服务器中限制IP访问频率的。

美国云服务器Nginxlimit_req模块采用漏桶算法,可以控制请求到达业务层的速率,以下配置能限制单个IP每秒最多发起10个请求,突发流量暂存5个请求。

nginx  
http {  
limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=10r/s;  
server {  
location /api/ {  
limit_req zone=ip_limit burst=5 nodelay;  
proxy_pass http://backend;  
}  
}  
}  

zone=ip_limit:10m:分配10MB内存存储IP状态,约可记录16万个IP。  

rate=10r/s:每秒10次请求限制,实际按毫秒平滑处理(即每100ms允许1次)。  

burst=5:允许瞬时超出5个请求,超出部分排队处理而非直接拒绝。  

nodelay:突发请求立即处理而非延迟,避免客户端长时间等待。  

恶意爬虫往往高频访问特定动态接口,而正常用户主要触发静态资源(如图片、CSS)。通过差异化限速保护核心业务:  

nginx  
map $uri $limit_bucket {  
~^/api/    "dynamic";  
default    "static";  
}  
limit_req_zone $binary_remote_addr zone=dynamic_limit:10m rate=5r/s;  
limit_req_zone $binary_remote_addr zone=static_limit:10m rate=50r/s;  
server {  
location /api/ {  
limit_req zone=dynamic_limit burst=3;  
proxy_pass http://backend;  
}  
location / {  
limit_req zone=static_limit burst=20;  
root /var/www/html;  
}  
}  

此策略将动态接口限制为每秒5次,静态资源放宽至50次,既不影响用户体验,又保护关键业务。  

CDN节点、内部监控系统等可信IP需加入白名单,避免误伤:  

nginx  
geo $whitelist {  
default 0;  
192.168.1.0/24 1;   内网IP  
203.0.113.50 1;      CDN节点  
}  
map $whitelist $limit_key {  
0 $binary_remote_addr;  
1 "";  
}  
limit_req_zone $limit_key zone=all_limit:10m rate=20r/s;  
server {  
location / {  
limit_req zone=all_limit burst=10;  
...其他配置  
}  
}  

白名单内的IP不受限速规则约束,确保关键服务畅通无阻。对于持续攻击的IP,可使用OpenResty的Lua扩展实现动态封禁:  

nginx  
http {  
lua_shared_dict ip_blacklist 10m;  
init_by_lua_block {  
local blacklist = ngx.shared.ip_blacklist  
blacklist:set("192.0.2.100", 1)   初始黑名单  
}  
server {  
access_by_lua_block {  
local client_ip = ngx.var.remote_addr  
local blacklist = ngx.shared.ip_blacklist  
if blacklist:get(client_ip) then  
ngx.exit(ngx.HTTP_FORBIDDEN)  
end  
}  
location /report {  
content_by_lua_block {  
local client_ip = ngx.var.remote_addr  
local blacklist = ngx.shared.ip_blacklist  
blacklist:set(client_ip, 1, 3600)   封禁1小时  
ngx.say("IP ", client_ip, " 已被加入黑名单")  
}  
}  
}  
}  

自动拦截黑名单IP,人工或外部系统可通过/report接口动态添加恶意IP。  

结合WAF日志分析工具,可自动识别攻击IP并调用接口封禁。  攻击者常通过代理IP池或慢速攻击绕过基础防护,需组合策略应对:  

UserAgent过滤:拦截非常见浏览器标识  

nginx  
if ($http_user_agent ~ "wget|curl|python") {  
return 403;  
}  

验证码挑战:对高频IP返回验证码页面  

nginx  
error_page 503 @verify;  
location @verify {  
add_header ContentType text/html;  
return 200 '<html>请完成验证码<iframe src="/captcha"></iframe></html>';  
}  

日志分析与动态调整使用GoAccess分析Nginx日志,识别异常请求模式,根据业务高峰时段动态调整限速阈值如促销期间临时放宽限制。

配置完成后需验证规则是否生效:  

手动测试,触发限速  

for i in {1..15}; do curl http://server/api/login; done  

观察返回429 Too Many Requests  

自动化压测(查看成功率与拒绝请求数 ):  

ab n 1000 c 50 http://server/api/login  

监控指标:  Nginx活跃连接数(ngx_http_active_connections)  、限速模块拒绝次数(ngx_http_limit_req_status) 。

综上看Nginx精细化的流量管控,无需依赖昂贵的安全硬件,即可在代码层面筑起一道自适应防线。

相关内容

香港云服务器Nginx与防火墙冲突问题解决方案 美国云服务器Nginx访问日志分割的方法 Jtti周年庆大促,cn2 gia云服务器75% off,续费最高送30天 带你了解sudo命令的使用方法 完善OpenStack pike的卷管理的步骤 在Linux上安装Unity编辑器的方法 搭建网站使用DIV+CSS布局有哪些好处? DB2数据库事务日志已满如何解决? 怎么使用WordPress制作主题导航菜单? 云服务器常见CPU类型有哪些如何挑选
返回

24/7/365 全天候支持我们时刻恭候您

帮助中心