Richtlinienvererbung in geschachtelten Speicherbereichen

8

Sind die folgenden zwei nginx Serverblöcke semantisch gleich, oder gibt es einen Unterschied? Erbt die JSON-spezifische Konfiguration im ersten Beispiel die Einstellungen für den Standort "/"? Ist es im zweiten Beispiel?

%Vor%     
muffel 19.08.2015, 20:09
quelle

1 Antwort

11

Die Vererbung von Konfigurationsdirektiven in Nginx ist so, dass Direktiven nur von Kontexten weiter oben im Konfigurationsbaum und niemals von Kontexten auf der gleichen oder niedrigeren Ebene vererbt werden können.

Ein Standortblock kann also nicht von einem anderen Standortblock erben, aber ein geschachtelter Standortblock kann vom übergeordneten Standortblock erben.

Ich habe kann betont, weil es eine Reihe verschiedener Arten von Direktiven gibt und das Vererbungsverhalten für jedes etwas anders ist.

  1. Es gibt Standard-Direktiven, die nur einen Wert oder Satz haben von Werten angehängt. Diese werden einfach von niedrigeren Kontexten vererbt den Konfigurationsbaum herunterfahren oder in diesem niedrigeren Kontext durch Neu ersetzen Werte. Ein Beispiel ist "index".

  2. Array-Typ-Direktiven, die mehrere separate Werte in einem übergeben Array. Diese werden einfach von Kontexten geerbt, die weiter unten liegen Config Tree oder ersetzt in diesem unteren Kontext durch neue Werte. Beachten Sie, dass Sie das Array nicht hinzufügen können. Das ändernde Teil ersetzt es alle. Ein Beispiel ist "proxy_param". Wenn Sie also proxy_param A und Proxy_param B zum Beispiel auf Serverebene und versuchen Sie es dann Definieren Sie proxy_param C in einem Standortkontext, "A" und "B" wären ausgelöscht (auf Standardwerte gesetzt). als definierendes "C" hat gemeint Ersetzen des Arrays.

  3. Befehlstyp-Direktiven wie "try_files" sind im Allgemeinen nicht überhaupt geerbt.

So speziell zu Ihrer Frage können Direktiven, die in einem Standortblockkontext definiert sind, nicht wie in Ihrem zweiten Beispiel von einem anderen vererbt werden.

Standard- und Array-Typ-Direktiven, die im übergeordneten Standortblock definiert sind, werden vom verschachtelten Standortblock geerbt. Befehlstyp-Direktiven, die im Parent definiert sind, werden im Allgemeinen nicht geerbt.

    
Dayo 20.08.2015, 19:19
quelle

Tags und Links