2012-06-07 14 views
5

Używam Nginx przed jednorożcem. Gdy aplikacja znajduje się pod dużym obciążeniem, a wszyscy pracownicy jednorożca są zajęci, nginx zwróci odpowiedź 502, informując, że brama jest źle skonfigurowana. Nie mam problemu z tym zachowaniem, ale w tym stanie chcę, aby nginx zwrócił kod odpowiedzi 503 (serwer zajęty, spróbuj ponownie później), co jest znacznie bardziej odpowiednią odpowiedzią.Zmień kod stanu, który zwraca Nginx, gdy upstream jednorożec jest zajęty

Widziałem tej odpowiedzi: Is it possible to change the HTTP status code returned when proxy_pass gateway is down in nginx?

który opisuje w jaki sposób przepisać niektóre kody stanu zwracane z upstream Proxy:

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; 
} 

ale są 2 problemy z tym:

  1. Wcześniejsza aplikacja czasami zwraca 502 kody odpowiedzi dla ważnych sytuacji, które powinny zostać zachowane.
  2. Nie jestem przekonany, czy serwer pośredniczący w starszej wersji faktycznie zwraca ten błędny kod stanu, bardziej prawdopodobne, że nginx nie umieści elementu w buforze (tcp?), A następnie nginx zwróci błędny kod statusu.

Czy istnieje sposób, w jaki mogę kontrolować kod statusu zwrócony przez nginx w tej sytuacji, aby był to 503 zamiast 502?

+0

Dlaczego ustawiasz 'proxy_intercept_errors on;' jeśli nie chcesz przechwytywać błędów z serwera proxy? I dlaczego uważasz, że "nginx zwraca błędny kod statusu"? – VBart

+1

Przykład kodu, jeśli z zadanego pytania wewnątrz mojego pytania, a nie mojego kodu. Myślę, że nginx zwraca mylący kod statusu, ponieważ 502 jest zwracany, gdy serwer sieciowy nie ma dodatkowej pojemności. Serwer nie jest źle skonfigurowany, jest po prostu zajęty, to powinien być 503. – Macdiesel

+1

W jaki sposób nginx może wiedzieć, że serwer jest zajęty, jeśli nie reaguje prawidłowo? – VBart

Odpowiedz

0

Czy rozważałeś rozwiązać ten problem na serwerze zaplecza? Zmniejsz liczbę klientów akceptowanych przez serwer zaplecza, aby żądania do niego zasadniczo zakończyły się sukcesem lub nie, i nie utknąć w stanie melasy, który zwraca 503. Idealnie, będziesz w stanie dostroić serwer zaplecza zwraca 503, gdy zabraknie dostępnych klientów, a Nginx będzie nadal zwracał 502, gdy serwer zaplecza jest faktycznie wyłączony.

Powiązane problemy