2012-06-07 24 views
5

我在独角兽前使用Nginx。当应用程序处于高负载状态并且所有独角兽工作人员都忙时,nginx将返回502响应,说明网关配置错误。我对这种行为很满意,但在这种情况下,我希望nginx能够返回一个503响应代码(服务器忙,稍后再试),这是一个更合适的响应。更改Nginx在上游独角兽繁忙时返回的状态码

我看到了这样的回答: 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; 
} 

但也有2个问题与此:

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

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

+0

如果您不想拦截来自代理的错误,为什么要在'; proxy_intercept_errors'上设置';';为什么你认为“nginx返回误导性的状态码”? – VBart

+1

代码示例如果来自我的问题中引用的问题,而不是我的代码。 我认为nginx返回一个误导性的状态代码,因为当上游web服务器没有任何额外容量时返回502。服务器没有配置错误,它只是很忙,应该是503. – Macdiesel

+1

如果服务器没有正确响应,nginx如何知道服务器正忙? – VBart

回答

0

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