Nginx enthält Konfigurationsdateien, die nicht in Ordnung sind?

12

Ist die Reihenfolge, in der Nginx Konfigurationsdateien enthält, festgelegt oder zufällig? Apache gibt ausdrücklich an, dass Platzhalterzeichen in alphabetischer Reihenfolge erweitert werden. Bei Nginx scheint dies nicht zuzutreffen, und das Handbuch sagt nichts darüber aus .

In meinem Setup 20_example.comwar zuvor enthalten 00_default, was meinen Zweck der Definition von freigegebenen Anweisungen (wie Protokollformaten) dort zunichte macht.

Jan Fabry
quelle

Antworten:

3

Die Antwort von AD7six ist nicht ganz richtig. Die Reihenfolge ist auch dann von Bedeutung, wenn zwei Serverblöcke dieselbe "Spezifität" aufweisen, z. B. wenn beide reguläre Ausdrücke in Servername verwenden und die eingehende Anforderung mit beiden übereinstimmt:

server {
    server_name ~^(www\.)?(?<domain>foo\.com|bar\.com|baz\.com)$;
    ...
}

und

server {
    server_name ~^(www\.)?(?<domain>.+)$;
    ...
}

In diesem Szenario können die beiden Serverblöcke nicht auf zwei Dateien verteilt werden, da ihre Reihenfolge dann nicht garantiert werden kann.

Rufo
quelle
1

Da OP auf die log_format-Reihenfolge hinweist, ist es in der Tat sehr wichtig, dass bei benutzerdefinierten log_formaten einige Dateien mit log_formaten, einige Dateien mit Serverblöcken, die diese log_formate verwenden, in dasselbe Verzeichnis kopiert werden sehr unwiederholbare Konfiguration.

Bei der Arbeit, als wir unsere handgefertigte Nginx-Farm zum ersten Mal in Puppet umstellten, begannen wir, einige Nginx-Installationen von Grund auf mit identischer Hardware / Einrichtung zu testen, nachdem wir viele bizarre Situationen wie zwei / etc / nginx / * (- r) Mit einem md5match und derselben Binärdatei, die unterschiedliche Ergebnisse liefern (ungültiger log_format-Fehler bei einer und bei einer anderen), haben wir gelernt, wie schwierig es ist, die Reihenfolge für einige Anweisungen wie log_format zu bestimmen.

Wir haben das Problem behoben, indem wir die Serverblock-Generierung aus conf.d / * in einen anderen Ordner verschoben, der nach conf.d / * enthalten ist.

Tapferkeit
quelle