概述
从一个客户端涌来的突发流量会耗尽应用的 worker,而边缘层若缺少廉价控制手段便无从缓解。Nginx 的共享区限流能在请求抵达应用前按标识降速,成本几乎为零。
关键步骤
- 以合适的客户端标识定义 limit_req_zone。
- 施加以突发额度与 nodelay 的 limit_req。
- 超限时返回 429 及 Retry-After。
- 谨慎选择键:代理后应优先用 API key 而非原始地址。
验证
- 持续滥用会被限速至 429。
- 短暂突发仍被容忍。
- 共享 NAT 下的正常用户不被整段限速。
- 超限响应带有 Retry-After。
注意事项
- 除非各节点共享一致的区,Nginx 限流是按实例计。
- 以原始地址为键在代理与共享 NAT 下会误伤错误客户端。
适用范围
本条目围绕「在 Nginx 边缘层添加限流」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。
limit_req_zone $http_x_api_key zone=api:10m rate=20r/s;
server {
location /api/ {
limit_req zone=api burst=40 nodelay;
limit_req_status 429;
proxy_pass http://app;
}
}