如何configurationnginx在限制/速率限制时返回http状态码429(太多请求),而不是默认的503(服务不可用)?
仅供参考,我使用nginx作为HttpLimitReqModule的反向代理。 429状态码的规范草案是RFC6585 。
关于stackexchanged的这个(closures的) 问题表明可以使用error_page指令。 但是,如果确实存在服务器问题(而不是客户打我们太多),并且服务器应返回503服务不可用,我不想返回429。
有什么build议么?
好消息,版本1.3.15 http://mailman.nginx.org/pipermail/nginx/2013-March/038306.html
我们有“limit_req_status”和“limit_conn_status”指令。 我只是在Gentoo Linux上testing它们(注意,你需要将模块limit_req和limit_con编译进去)。
有了这些设置,我认为你可以实现你所要求的:
limit_req_status 429; limit_conn_status 429;
我已经快速validation了这一点:
ab2 -n 100000 -c 55 "http://127.0.0.1/api/v1
由于nginx中的请求率高和configuration的限制,在激活指令后大多数请求失败:
limit_req zone=api burst=15 nodelay;
基于VBart的回应和其他评论,很明显,最好的select是把503错误映射到429s。
error_page 503 = 429 /too-many-requests.html
由于nginx(1.3.x)只能使用503个状态码作为limit_req和limit_conn,所以这应该是一个很好的方法。
除了limit_req和limit_conn之外,Nginx本身永远不会返回503。