我在独角兽面前使用 Nginx。当应用程序处于高负载并且所有独角兽工作者都忙时,nginx 将返回一个 502 响应,说明网关配置错误。我可以接受这种行为,但在这种情况下,我希望 nginx 返回一个 503 响应代码(服务器忙,稍后再试),这是一个更合适的响应。
我看到了这个答案: Is it possible to change the HTTP status code returned when proxy_pass gateway is down in nginx?
其中描述了如何重写从上游代理返回的一些状态码:
location / {
proxy_pass http://backend;
proxy_intercept_errors on;
error_page 502 503 504 =503 @proxyisdown; # always reply with 503
}
location @proxyisdown {
add_header Retry-After 500;
index my_pretty_error_page.html;
}
但这有两个问题:
- 上游应用程序有时会针对应保留的有效情况返回 502 响应代码
- 我不相信上游代理实际上返回了这个错误的状态码,更可能的是 nginx 无法将项目放在(tcp?)缓冲区上,然后 nginx 返回误导性的状态码。
在这种情况下,有什么方法可以控制 nginx 返回的状态码,使其变为 503 而不是 502?