2011-11-23 6 views
15

Dla celów SEO, chcielibyśmy zmienić kod statusu HTTP zwrócony za każdym razem, gdy maszyna zaplecza za Nginx z jakiegoś powodu zanika.Czy można zmienić kod statusu HTTP zwrócony, gdy brama proxy_pass jest wyłączona w nginx?

Chcielibyśmy zmienić to na "503 Usługa niedostępna". Jak również dostarczyć nagłówek Retry-After do wskazanego Google/Bing, że żądanie powinno zostać ponowione w X liczbie sekund.

Czy to możliwe za pośrednictwem nginx?

Nie mówię o niestandardowej stronie błędu, ale raczej o kodzie statusu zwróconym w nagłówku.

Odpowiedz

29

Myślę, że musisz ustawić konkretną stronę błędu, ale możesz osiągnąć to, czego szukasz, jeśli to zrobisz. Spróbuj tego:

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

Jeśli działa to w ten sposób, powinieneś być w stanie powrócić do 503 (to jest =503 część dyrektywy error_page) i ponownie-po nagłówkach z korzyści, które użytkownicy będą otrzymywać ładnie sformatowany "Ups, mamy obecnie problemy, spróbuj ponownie za kilka minut" zamiast pustego "503 nie wiesz, co to znaczy". :)

+0

będzie próbować tego później dzisiaj. Powinienem być bardziej przejrzysty w tym pytaniu, zastosowana zostanie również niestandardowa strona błędu ... po prostu wiemy, jak to zrobić, po prostu nie wiedzieliśmy, jak zmienić kod statusu/dodać nagłówek ponowienia próby. tak czy inaczej, wrócimy w ciągu 12 godzin i poinformujemy Cię, co wymyślimy. biorąc pod uwagę, że wygląda dokładnie tak, jak tego szukamy :) thx. –

+0

Zaktualizowano odpowiedź, aby uzyskać większą jasność na temat zwracania wymaganego kodu błędu. –

+1

Wszystko działa zgodnie z oczekiwaniami. Tyle tylko, że add_header nie jest obsługiwany przez odpowiedź 503 w nginx. Sprawdź http://forum.nginx.org/read.php?2,3727, aby uzyskać więcej informacji. –

2

Nazwa strona błędu /500.html oraz:

error_page 400 404 500 502 504 =503 /500.html; 

# Optional if your public root is set above and the same for error pages, 
# I sometimes please them outside the app, which is why I'm including it. 
location /500.html { 
    root /path/to/public; 
} 

powinny działać dobrze i wydaje się nieco prostsze do mnie. Uwaga: nie obsługuje również nagłówka.