Nginx senden leer 200 Antworten

19

Ich konfiguriere einen Failover-Server, der eingehende Anforderungen entgegennehmen und mit leeren 200 Antworten antworten soll. Die Idee ist, die Antwortzeit zu minimieren und sicherzustellen, dass wir keine 40x oder 50x senden.

Ich habe versucht, return 200;für die gewünschten Standorte in Nginx zu verwenden, aber meine Überwachungssysteme (Pingdom) mochten die Antwort nicht und erwägen, dass der Server nicht reagiert.

Gibt es einen besseren Weg, dies zu tun, natürlich mit minimalem Overhead auf dem Server?

Sparsh Gupta
quelle

Antworten:

23

Der HTTP-Statuscode 204 No Contentsoll lauten: "Ich habe die Anforderung abgeschlossen, aber es ist kein Nachrichtentext zum Zurückgeben vorhanden":

10.2.5 204 Kein Inhalt

Der Server hat die Anforderung erfüllt, muss jedoch keinen Entity-Body zurückgeben und möchte möglicherweise aktualisierte Metainformationen zurückgeben. Die Antwort kann neue oder aktualisierte Metainformationen in Form von Entity-Headern enthalten, die, falls vorhanden, der angeforderten Variante zugeordnet werden MÜSSEN.

Wenn der Client ein Benutzeragent ist, DARF er die Dokumentansicht NICHT von der Ansicht ändern, die zum Senden der Anforderung geführt hat. Diese Antwort dient in erster Linie dazu, Eingaben für Aktionen zu ermöglichen, ohne die aktive Dokumentansicht des Benutzeragenten zu ändern, obwohl neue oder aktualisierte Metainformationen auf das Dokument angewendet werden MÜSSEN, das sich derzeit in der aktiven Ansicht des Benutzeragenten befindet.

Die Antwort 204 DARF KEINEN Nachrichtentext enthalten und wird daher immer durch die erste leere Zeile nach den Kopfzeilenfeldern abgeschlossen.

Alexander Azarov
quelle
Hallo Alex Danke für den Hinweis. Ich frage mich nur, ob der Antwortcode 204 heutzutage von allen gängigen Browsern erkannt wird. dh, wenn mein Server anfängt, 204 zu senden, besteht eine Wahrscheinlichkeit, dass einige Besucher (über Browser, Handys, Terminals hinweg) einen Fehler erhalten?
Sparsh Gupta
1
@SparshGupta Ich bin kein Experte für Browserkompatibilität, sorry. Ich habe in einigen Browsern (FF 7 und Safari unter Mac OS X) einen kurzen Check durchgeführt - sie tun genau nichts. Wenn Sie beispielsweise bereits eine Seite geöffnet haben, geben Sie in der Adressleiste eine URL ein, die 204 zurückgibt, und drücken Sie die Eingabetaste. In beiden Browsern wird weiterhin die vorherige Seite angezeigt.
Alexander Azarov
29

Sie können Nginx veranlassen, ein leeres HTTP 200 durch einen Konfigurationsblock wie folgt zurückzugeben:

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

Sie können die access_logZeile aus dem Kommentar entfernen , wenn Sie nicht möchten, dass alle diese Integritätsprüfungen protokolliert werden.

Cody Caughlan
quelle
6
Es sollte beachtet werden, dass das '=' Zeichen nach dem Ort wichtig ist. Ohne sie muss diese Datei existieren, sonst wird nginx nicht 200 zurückgeben. Mit ihr können Sie sich einfach einen beliebigen Ort ausdenken und sich keine Sorgen um Dateien machen, und nginx wird glücklich 200 zurückgeben.
Florin Andrei
Wie kombiniere ich das mit der Basisauthentifizierung, sodass die authentifizierte Anforderung 200 und die nicht authentifizierte 401 zurückgibt?
Kiril