2012-06-07 23 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。