Nginx: chemin racine par rapport au fichier conf


17

Est-il possible de spécifier le rootchemin d'accès par rapport au fichier conf contenant?

Nous développons une application web et conservons un app-nginx.conffichier avec une configuration spécifique à l'application dans le répertoire du projet. Je veux pouvoir inclure ce fichier dans main nginx.confet avoir un rootchemin référençant correctement le sous-répertoire du projet requis. Exemple:

# /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;
}

Après avoir démarré nginx avec une configuration similaire, nginx essaie de résoudre le ./appchemin relatif au répertoire d'installation de nginx ( /usr/local/Cellar/nginx/1.4.3/dans mon cas), pas au répertoire de l'application.

Réponses:


11

Est-il possible de spécifier le chemin racine par rapport au fichier conf contenant?

Réponse courte: Non.

Réponse longue: Nginx, par défaut, ne connaît que le chemin tel que --prefixet --conf-pathqui est défini au moment de la compilation (réf: https://nginx.org/en/docs/configure.html ). Nous pouvons trouver différents chemins utilisés par Nginx en exécutant la commande nginx -V(c'est le "V" majuscule). C'est donc --conf-pathlà que nginx.confréside le fichier principal et ce chemin est utilisé pour tous les chemins relatifs.

Selon la documentation officielle ( https://nginx.org/r/root ), une rootdirective peut cependant contenir d'autres variables.

Merci pour @cyker d'avoir clarifié après 5 ans de publication de la réponse initiale!


Merci, Pothi. Malheureusement, aucune des options ne fonctionne pour moi. --prefixpeut affecter d'autres serveurs nginx et de mon point de vue personnel un peu plus difficile à gérer par rapport au fichier de configuration. Et nginx ne permet pas de créer des variables personnalisées avec une setdirective hors servercontexte, donc je ne peux pas déplacer le chemin absolu depuis mon fichier app-nginx.conf.
Anton Moiseev

Donc, ce chemin est utilisé pour tous les chemins relatifs. Je pense que c'est inexact. Il semble que nginx utilisera le répertoire de configuration pour les options includeet ssl_certificate, par exemple, mais utilisera le répertoire de préfixe pour des options telles que root. Je ne semble pas venir avec une liste complète sur laquelle chaque option utilise.
Cyker

@Cyker Vous avez raison. Mise à jour de la réponse maintenant. Bien sûr, ce n'est pas complet. Mais, mieux que la réponse originale (c'était en effet faux / inexact).
Pothi Kalimuthu

Je lis Nginx From Beginner to Pro, il est noté que: "Vous avez déjà vu l'utilisation de la directive racine à l'intérieur d'un bloc d'emplacement. La directive racine indique à Nginx de retourner /image/myimage.jpg au lieu du chemin complet / etc / nginx / html / app1 / image / myimage.jpg. " donc à mon humble avis, cela signifie que la configuration Nginx prend en charge les chemins relatifs?
Webwoman

Ici, la question est spécifique à la directive "root" et si elle peut prendre en charge "chemin relatif vers le fichier conf".
Pothi Kalimuthu

0

Je n'ai pas trouvé de moyen d'utiliser des chemins relatifs ou de définir des variables globales, mais cette petite astuce résout mon problème.


3
Quel petit truc?
Michael Hampton

Je ne peux pas définir de variable, mais je peux utiliser une mapdirective avec une defaultvaleur unique qui jouera le rôle de la variable pour moi.
Anton Moiseev,
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.