nginx wysyła puste 200 odpowiedzi

19

Konfiguruję serwer przełączania awaryjnego, którego zadaniem jest akceptacja każdego przychodzącego żądania i odpowiedź z pustą odpowiedzią 200. Chodzi o to, aby zminimalizować czas odpowiedzi i upewnić się, że nie wysyłamy żadnych 40x ani 50x.

Próbowałem użyć return 200;dla pożądanych lokalizacji w Nginx, ale moim systemom monitorowania (Pingdom) nie podobała się odpowiedź i uważam, że serwer nie odpowiada.

Czy istnieje lepszy sposób, aby to zrobić, oczywiście przy minimalnym obciążeniu serwera?

Sparsh Gupta
źródło

Odpowiedzi:

23

Kod stanu HTTP 204 No Contentma oznaczać „Wykonałem żądanie, ale nie ma treści do zwrócenia”:

10.2.5 204 Brak treści

Serwer spełnił żądanie, ale nie musi zwracać treści encji i może chcieć zwrócić zaktualizowane metainformacje. Odpowiedź MOŻE zawierać nowe lub zaktualizowane metainformacje w postaci nagłówków encji, które, jeśli są, POWINNY być powiązane z żądanym wariantem.

Jeśli klient jest agentem użytkownika, NIE POWINIEN zmieniać widoku dokumentu w stosunku do tego, który spowodował wysłanie żądania. Ta odpowiedź ma przede wszystkim umożliwić wprowadzanie działań bez powodowania zmiany w aktywnym widoku dokumentu agenta użytkownika, chociaż wszelkie nowe lub zaktualizowane metainformacje POWINNY być stosowane do dokumentu znajdującego się obecnie w aktywnym widoku agenta użytkownika.

Odpowiedź 204 NIE MOŻE zawierać treści komunikatu, a zatem zawsze kończy się pierwszą pustą linią po polach nagłówka.

Aleksander Azarow
źródło
Cześć Alex Dzięki za notatkę. Zastanawiam się tylko, czy kod odpowiedzi 204 jest obecnie rozpoznawany przez wszystkie główne przeglądarki. tzn. jeśli mój serwer zacznie wysyłać 204, czy istnieje prawdopodobieństwo, że niektórzy odwiedzający (w przeglądarkach, telefonach komórkowych, terminalach) otrzymają błąd?
Sparsh Gupta
1
@SparshGupta Niestety nie jestem ekspertem w zakresie kompatybilności przeglądarki. Szybko sprawdziłem kilka przeglądarek (FF 7 i Safari pod Mac OSX) - nic nie robią. Na przykład, jeśli masz już otwartą stronę, umieścisz adres URL zwracający 204 w pasku adresu i naciśniesz Enter, obie przeglądarki nadal wyświetlają poprzednią stronę.
Alexander Azarov
29

Możesz poprosić nginx o zwrócenie pustego HTTP 200 przez blok konfiguracji, taki jak:

location = /health {
  return 200;
  #access_log off;
}

Możesz odkomentować access_loglinię, jeśli nie chcesz rejestrować wszystkich kontroli stanu.

Cody Caughlan
źródło
6
Należy zauważyć, że znak „=” po lokalizacji jest ważny. Bez niego ten plik musi istnieć, w przeciwnym razie nginx nie zwróci 200. Dzięki temu możesz po prostu stworzyć dowolną lokalizację i nie martwić się o pliki, a nginx chętnie zwróci 200.
Florin Andrei
Jak połączyć to z podstawowym uwierzytelnianiem, takim jak żądanie uwierzytelnione zwraca 200 i nieuwierzytelniony 401?
Kiril,