Detaillierte Erläuterung der Fallstricke von add_header im Nginx-Konfigurationstutorial

Detaillierte Erläuterung der Fallstricke von add_header im Nginx-Konfigurationstutorial

Vorwort

add_header ist eine Direktive, die im Header-Modul definiert ist. Wie der Name schon sagt, wird sie zum Hinzufügen von HTTP-Antwortheadern verwendet. Beachten Sie jedoch, dass es lediglich „hinzugefügt“ und nicht neu geschrieben wird. Wenn also bereits ein Header vorhanden ist, verursacht die Verwendung von add_header Probleme. Darüber hinaus unterstützt add_header in früheren Versionen von nginx nicht die Verwendung auf Fehlerseiten.

Dies ist ein Befehl mit vielen Fallstricken. Seine Verarbeitungsphase ist später als die Standortverarbeitung. Obwohl es an einem Standort geschrieben werden kann, geht der add_header, der am vorherigen Standort nicht verarbeitet wurde, verloren, wenn ein anderer Standort neu geschrieben wird. Zum Beispiel:

Standort = /a {
 add_header eine 1;
 //b umschreiben;
}
Standort = /b {
 add_header b 2;
 Rückgabe 204;
} 

Es gibt keinen Kopf mit einer 1, oder? Das ist eine Grube!

Eine weitere Falle ist das eingangs erwähnte Duplizierungsproblem. Ich möchte beispielsweise für einen Inhalt den Content-Type festlegen, aber da global ein default_type festgelegt ist, wird dieser wiederholt.

Standardtyp „Text/Plain“;

Standort = /a {
 add_header Inhaltstyp application/json;
 gibt 200 ‚‚OK‘‘ zurück;
} 

Es gibt natürlich viele Lösungen, wie z. B. den Standardtyp für diesen Speicherort leer zu lassen oder einfach „add_header“ nicht zu verwenden und den Standardtyp für diesen Speicherort direkt zu ändern.

Die letzte große Falle besteht darin, dass es auf Fehlerseiten nicht funktioniert, was im Dokument auch klar definiert ist. Beispielsweise das folgende Beispiel:

Standort = /a {
 add_header Inhaltstyp application/json;
 return 404 ‚‚Nicht gefunden‘‘;
}

Ich möchte mit einem JSON antworten, aber da der Statuscode 404 ist, hat add_header hier keine Wirkung.

Obwohl dieses Beispiel das Problem mit dem Standardtyp lösen kann, was ist, wenn es sich um andere Header handelt? Was soll ich beispielsweise mit Access-Control-Allow-Origin tun? Dann gibt es keine Lösung außer der Verwendung von Lua oder anderen Drittanbietermodulen. Natürlich ist nginx sich dieses Problems bewusst, daher heißt es im Dokument auch, dass ab Version 1.7.5 ein Parameter namens „always“ unterstützt wird. Obwohl nginx selbst dieses Problem löst, wird es bei tengine basierend auf 1.6.2 Probleme geben.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • So fügen Sie Nginx zu den Systemdiensten in CentOS7 hinzu
  • So stellen Sie mit Nginx mehrere Vue-Projekte unter demselben Domänennamen bereit und verwenden einen Reverse-Proxy
  • Python-Implementierungsbeispiel zum Überwachen von Unterschieden in Nginx-Konfigurationsdateien und Senden von E-Mail-Benachrichtigungen
  • Detaillierte Erläuterung der Nginx-Installation, SSL-Konfiguration und allgemeinen Befehle unter Centos7.x
  • So konfigurieren Sie nginx+php+mysql in Docker
  • Lösung für ungültige Nginx-Cross-Domain-Einstellung Access-Control-Allow-Origin
  • Beispielmethode zum Bereitstellen eines React-Projekts auf Nginx
  • Verwenden Sie das Tool nginx.vim zur Syntaxhervorhebung und Formatierung der Konfigurationsdatei nginx.conf
  • Warum sollten Sie mit der add_header-Direktive von Nginx vorsichtig sein?
  • Detaillierte Schritte zum Bereitstellen von https-Websites und Konfigurieren der Adressumschreibung in Nginx

<<:  Weitergabe von SQL-Optimierungserfahrungen, wenn der Offset beim MySQL-Paging zu groß ist

>>:  So implementieren Sie Sveltes Defer Transition in Vue

Artikel empfehlen

Detaillierte Erläuterung der SSHD-Dienste und Dienstverwaltungsbefehle unter Linux

sshd SSH ist die Abkürzung für Secure Shell, ein ...

Verständnis und Lösungen für 1px-Linien in der mobilen Entwicklung

Gründe, warum die 1px-Linie dicker wird Wenn wir ...

Kapseln Sie die Navigationsleistenkomponente mit Vue

Vorwort: Die vollständige Kapselung eines Funktio...

Der Unterschied zwischen br und br/ in HTML

Antwort von Stackflow: Einfaches <br> genügt...

Details zur Verwendung des JSON-Typs in MySQL 5.7

JSON ist ein leichtes Datenaustauschformat, das e...

Einige „Fallstricke“ beim Upgrade der MySQL-Datenbank

Bei kommerziellen Datenbanken hat die Datenbankak...

JavaScript-Ereigniserfassungs-Blubbern und Erfassungsdetails

Inhaltsverzeichnis 1. Ereignisablauf 1. Konzept 2...

Tutorial zur Installation von MySQL 5.6 auf CentOS 6.5

1. Laden Sie das RPM-Paket für Linux herunter htt...

Zusammenfassung ungewöhnlicher JS-Operationsoperatoren

Inhaltsverzeichnis 2. Komma-Operator 3. JavaScrip...

Unterschiede zwischen Windows Server 2008R2, 2012, 2016 und 2019

Inhaltsverzeichnis Allgemeine Versionseinführung ...