5

我在独角兽面前使用 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; 
}

但这有两个问题:

  1. 上游应用程序有时会针对应保留的有效情况返回 502 响应代码
  2. 我不相信上游代理实际上返回了这个错误的状态码,更可能的是 nginx 无法将项目放在(tcp?)缓冲区上,然后 nginx 返回误导性的状态码。

在这种情况下,有什么方法可以控制 nginx 返回的状态码,使其变为 503 而不是 502?

4

1 回答 1

0

您是否考虑过使用后端服务器解决这个问题?调整后端服务器接受的客户端数量,以便对它的请求通常成功或失败,并且不会陷入返回 503 的糖蜜状态。理想情况下,您将能够调整后端服务器当可用客户端用完时返回 503,而 Nginx 将在后端服务器实际关闭时继续返回 502。

于 2012-06-12T15:08:31.277 回答