Nginx: Root-Pfad relativ zur Conf-Datei

17

Ist es möglich, den rootPfad relativ zur enthaltenen conf-Datei anzugeben?

Wir entwickeln eine Web-App und app-nginx.confspeichern die Datei mit der app-spezifischen Konfiguration im Projektverzeichnis. Ich möchte in der Lage sein, diese Datei in das Hauptverzeichnis aufzunehmen nginx.confund einen rootPfad zu haben, der ordnungsgemäß auf das Unterverzeichnis des erforderlichen Projekts verweist. Beispiel:

# /etc/nginx/nginx.conf
http {
    include /absolute/path/to/app/app-nginx.conf
}


# /absolute/path/to/app/app-nginx.conf
server {
    server_name localhost;
    listen 9090;

    root ./app;
}

Nach dem Start von nginx mit ähnlicher Konfiguration versucht nginx, den ./appPfad relativ zum Installationsverzeichnis von nginx ( /usr/local/Cellar/nginx/1.4.3/in meinem Fall) aufzulösen , nicht zum Verzeichnis der App.

Anton Moiseev
quelle

Antworten:

11

Ist es möglich, den Root-Pfad relativ zur enthaltenen conf-Datei anzugeben?

Kurze Antwort: Nein.

Lange Antwort: Nginx, standardmäßig weiß nur über den Weg, wie --prefixund --conf-path, die an der Kompilierung festgelegt (ref: https://nginx.org/en/docs/configure.html ). Wir können verschiedene von Nginx verwendete Pfade finden, indem wir den Befehl ausführen nginx -V(Großbuchstabe "V"). Hier --conf-pathbefindet sich also die Hauptdatei nginx.conf, und dieser Pfad wird für alle relativen Pfade verwendet.

Gemäß der offiziellen Dokumentation ( https://nginx.org/r/root ) kann eine rootDirektive jedoch auch andere Variablen enthalten.

Vielen Dank für @cyker für die Klärung nach 5 Jahren der Veröffentlichung der ersten Antwort!

Pothi Kalimuthu
quelle
Vielen Dank, Pothi. Leider funktioniert keine der Optionen für mich. --prefixkann andere nginx-server betreffen und aus meiner persönlichen sicht etwas schwieriger zu verwalten im vergleich zur konfigurationsdatei. Und nginx erlaubt es nicht, benutzerdefinierte Variablen mit setDirektiven außerhalb des serverKontexts zu erstellen , daher kann ich keinen absoluten Pfad aus meiner app-nginx.conf-Datei verschieben.
Anton Moiseev
Dieser Pfad wird also für alle relativen Pfade verwendet. Ich halte das für ungenau. Es scheint, dass Nginx das Konfigurationsverzeichnis für Optionen verwendet includeund ssl_certificatebeispielsweise das Präfixverzeichnis für Optionen wie root. Ich habe anscheinend keine vollständige Liste, welche Option verwendet wird.
Cyker
@ Cyker Du hast recht. Die Antwort wurde jetzt aktualisiert. Natürlich ist es nicht vollständig. Aber besser als die ursprüngliche Antwort (das war in der Tat falsch / ungenau).
Pothi Kalimuthu
Beim Lesen von Nginx From Beginner to Pro wird Folgendes bemerkt: "Sie haben bereits die Verwendung der root-Direktive in einem Location-Block gesehen. Die root-Direktive weist Nginx an, /image/myimage.jpg anstelle des vollständig qualifizierten Pfads / etc / zurückzugeben. nginx / html / app1 / image / myimage.jpg. " Also bedeutet es meiner Meinung nach, dass Nginx Config relative Pfade unterstützt?
Webwoman
Hier ist die Frage spezifisch für die "root" -Direktive und ob sie den "relativen Pfad zur conf-Datei" unterstützen könnte.
Pothi Kalimuthu
0

Ich habe keine Möglichkeit gefunden, relative Pfade zu verwenden oder globale Variablen zu definieren, aber dieser kleine Trick löst mein Problem.

Anton Moiseev
quelle
3
Was für ein kleiner Trick?
Michael Hampton
Ich kann keine Variable definieren, aber ich kann eine mapDirektive mit einem einzelnen defaultWert verwenden, die für mich die Rolle der Variablen spielt.
Anton Moiseev