我在独角兽面前使用nginx。当应用程序处于高负载且所有unicorn工作人员都忙时,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?)buffer,然后nginx返回错误的状态代码。
在这种情况下,我是否可以控制nginx返回的状态代码,使其成为503而不是502?
最佳答案
你考虑过用后端服务器解决这个问题吗?减少后端服务器接受的客户机数量,这样对它的请求通常会成功或失败,并且不会陷入返回503的molasses状态。理想情况下,当后端服务器没有可用的客户端时,您可以将其优化为返回503,当后端服务器实际关闭时,nginx将继续返回502。