![如何配置 nginx 以在速率限制时返回 429 http 代码?](https://linux22.com/image/799668/%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%20nginx%20%E4%BB%A5%E5%9C%A8%E9%80%9F%E7%8E%87%E9%99%90%E5%88%B6%E6%97%B6%E8%BF%94%E5%9B%9E%20429%20http%20%E4%BB%A3%E7%A0%81%EF%BC%9F.png)
答案1
好消息,版本 1.3.15 http://mailman.nginx.org/pipermail/nginx/2013-March/038306.html
我们有“limit_req_status”和“limit_conn_status”指令。我刚刚在 Gentoo Linux 上测试了它们(请注意,您需要将模块 limit_req 和 limit_con 编译进去)。
通过这些设置,我认为您可以实现您的要求:
limit_req_status 429;
limit_conn_status 429;
我已经通过以下方式验证了这一点:
ab2 -n 100000 -c 55 "http://127.0.0.1/api/v1
由于请求率过高以及 nginx 中配置的限制,激活该指令后大多数请求都失败:
limit_req zone=api burst=15 nodelay;
答案2
根据 VBart 的回复和其他评论,很明显最好的选择是将 503 错误映射到 429。
error_page 503 = 429 /too-many-requests.html
由于 nginx(1.3.x)仅对 limit_req 和 limit_conn 使用 503 状态代码,因此这应该是一种不错的方法。
答案3
Nginx 本身在除了 limit_req 和 limit_conn 之外的情况下绝不会返回 503。