登录接口防刷需用limit_req在入口拦截,核心配置:http块定义limit_req_zone $binary_remote_addr zone=login_limit:5m rate=5r/m;location块中启用limit_req zone=login_limit burst=3 nodelay并设limit_req_status 429;叠加limit_conn_zone与limit_conn限制单ip并发连接数,可选geo+map实现白名单豁免。

针对登录接口做严格防刷限流,核心是用 limit_req 在请求抵达后端前就拦截高频尝试,不依赖业务逻辑,响应快、效果直接。
定义专用限流区域(放在 http 块)
为登录接口单独建一个内存区,避免和其他接口共用规则:
http {
# 每分钟最多 5 次,内存 5MB(够存约 8 万个 IP)
limit_req_zone $binary_remote_addr zone=login_limit:5m rate=5r/m;
}
说明:
• $binary_remote_addr:用二进制格式存 IP,省内存、查得快
• rate=5r/m:比每秒限流更贴合人工操作节奏,也更容易识别机器行为
• 5m 内存:对登录这类低频路径足够,也减少内存占用
在登录路径精准启用限流(location 块)
必须匹配真实的登录入口,比如 /api/login 或 /login,不能笼统写在 / 下:
location /api/login {
limit_req zone=login_limit burst=3 nodelay;
limit_req_status 429;
proxy_pass http://backend;
}
关键点:
• burst=3:允许用户手抖多点几次,但无法持续高频提交
• nodelay:超出即刻拒绝,不排队——防止攻击者靠“占位”耗尽资源
• limit_req_status 429:返回标准 HTTP 429,语义清晰,不暴露后端状态
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
叠加连接数限制,防并发绕过
单靠请求速率不够,攻击者可能开几十个连接同时发请求。加一层连接控制:
http {
limit_conn_zone $binary_remote_addr zone=login_conn:5m;
}
location /api/login {
limit_conn login_conn 3;
# 其他限流配置保持不变
}
• 每个 IP 最多维持 3 个并发 TCP 连接
• 配合请求限流,双重卡死暴力破解路径
可选但推荐:加白名单绕过内部测试或运维
避免自己调试时被误拦,可在限流前用 geo 或 map 标记可信 IP:
geo $limited_ip {
default 1;
192.168.1.0/24 0;
10.0.0.5 0;
}
map $limited_ip $login_burst {
1 3;
0 100;
}
limit_req_zone $binary_remote_addr zone=login_limit:5m rate=5r/m;
location /api/login {
limit_req zone=login_limit burst=$login_burst nodelay;
limit_req_status 429;
proxy_pass http://backend;
}
这样内网和指定运维 IP 就不受限,线上又保持严格防护。










