Frage nginx sendet leere 200 Antworten


Ich konfiguriere einen Failover-Server, der beauftragt wird, alle eingehenden Anfragen zu akzeptieren und mit der Antwort "blank 200" zu antworten. Die Idee ist, die Antwortzeit zu minimieren und sicherzustellen, dass wir keine 40x oder 50x senden.

Ich habe es versucht return 200; für die gewünschten Orte in Nginx, aber meine Überwachungssysteme (Pingdom) mochte die Antwort nicht und betrachte den Server nicht reagierend.

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


18
2017-10-11 13:15


Ursprung




Antworten:


HTTP-Statuscode 204 No Content soll sagen "Ich habe die Anfrage erledigt, aber es gibt keinen Körper, den ich zurückbringen kann":

10.2.5 204 Kein Inhalt

Der Server hat die Anfrage erfüllt, muss aber keine zurückgeben   Entity-Body und möchten möglicherweise aktualisierte Metainformationen zurückgeben. Das   Antwort kann neue oder aktualisierte Metainformation in Form von   Entity-Header, die, wenn vorhanden, mit den   gewünschte Variante

Wenn der Client ein Benutzeragent ist, SOLLTE er seine Dokumentansicht NICHT ändern   von dem, was die Anfrage gesendet hat. Diese Antwort ist   hauptsächlich dazu gedacht, Eingaben für Aktionen zu ermöglichen, ohne dass sie stattfinden   verursacht jedoch eine Änderung an der aktiven Dokumentansicht des Benutzeragenten   Jede neue oder aktualisierte Metainformation sollte auf das Dokument angewendet werden   derzeit in der aktiven Ansicht des Benutzeragenten.

Die 204 Antwort darf keinen Nachrichtenkörper enthalten und ist daher immer   wird durch die erste leere Zeile nach den Header-Feldern beendet.


21
2017-10-11 13:32



Hallo Alex Danke für die Nachricht. Ich frage mich nur, ob der Antwortcode von allen gängigen Browsern erkannt wird. Wenn mein Server mit dem Senden von 204 beginnt, gibt es dann eine Wahrscheinlichkeit, dass einige Besucher (über Browser, Handys, Terminals) einen Fehler erhalten? - Sparsh Gupta
@SparshGupta Ich bin kein Experte für Browserkompatibilität, sorry. Ich habe in ein paar Browsern (FF 7 und Safari unter Mac OSX) einen schnellen Check gemacht - sie machen nichts. Wenn Sie beispielsweise eine Seite bereits geöffnet haben, geben Sie eine URL ein, die 204 in die Adressleiste zurückgibt, und drücken die Eingabetaste. In beiden Browsern wird weiterhin die vorherige Seite angezeigt. - Alexander Azarov


Sie können nginx ein leeres HTTP 200 durch einen Config-Block wie folgt zurückgeben lassen:

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

Sie können das Kommentarzeichen entfernen access_log Zeile, wenn Sie nicht möchten, dass alle diese Health-Checks protokolliert werden.


27
2017-10-16 23:00



Es sollte beachtet werden, dass das Zeichen "=" nach dem Ort wichtig ist. Ohne diese Datei muss diese Datei vorhanden sein, sonst gibt nginx nicht 200 zurück. Damit können Sie einfach jeden beliebigen Speicherort erstellen und sich keine Gedanken um Dateien machen, und nginx wird 200 zurückgeben. - Florin Andrei
Wie kombiniert man das mit Basic Auth, so dass authentifizierte Anfragen 200 und nicht authentifizierte 401 zurückliefern? - Kiril