Nginx: ruta raíz relativa al archivo conf

17

¿Es posible especificar la rootruta relativa al archivo conf que contiene?

Estamos desarrollando una aplicación web y mantenemos el app-nginx.confarchivo con la configuración específica de la aplicación en el directorio del proyecto. Quiero poder incluir este archivo en main nginx.confy tener una rootruta que haga referencia correctamente al subdirectorio del proyecto requerido. Ejemplo:

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

Después de iniciar nginx con una configuración similar, nginx intenta resolver la ./appruta relativa al directorio de instalación de nginx ( /usr/local/Cellar/nginx/1.4.3/en mi caso), no al directorio de la aplicación.

Anton Moiseev
fuente

Respuestas:

11

¿Es posible especificar la ruta raíz en relación con el archivo conf que contiene?

Respuesta corta: no.

Respuesta larga: Nginx, de manera predeterminada, solo conoce la ruta como --prefixy --conf-pathque se configuran en el momento de la compilación (ref: https://nginx.org/en/docs/configure.html ). Podemos encontrar varias rutas utilizadas por Nginx ejecutando el comando nginx -V(es "V" mayúscula). Entonces, --conf-pathes donde nginx.confreside el archivo principal y esa ruta se usa para cualquier ruta relativa.

Sin embargo, según la documentación oficial ( https://nginx.org/r/root ), una rootdirectiva puede contener otras variables.

¡Gracias por @cyker por aclarar después de 5 años de publicar la respuesta inicial!

Pothi Kalimuthu
fuente
Gracias Pothi. Lamentablemente, ninguna de las opciones funciona para mí. --prefixpuede afectar a otros servidores nginx y, desde mi perspectiva personal, un poco más difícil de administrar en comparación con el archivo de configuración. Y nginx no permite crear variables personalizadas con setdirectivas fuera del servercontexto, por lo que no puedo mover la ruta absoluta desde mi archivo app-nginx.conf.
Anton Moiseev
Entonces, esa ruta se usa para cualquier ruta relativa. Creo que esto es inexacto. Parece que nginx usará el directorio de configuración para las opciones includey ssl_certificate, por ejemplo, pero usará el directorio de prefijo para opciones como root. Parece que no tengo una lista completa sobre cuál usa cada opción.
Cyker
@Cyker Tienes razón. Se actualizó la respuesta ahora. Por supuesto, no está completo. Pero, mejor que la respuesta original (eso fue de hecho incorrecto / inexacto).
Pothi Kalimuthu
Estoy leyendo Nginx From Beginner to Pro, se observa que: "Ya has visto el uso de la directiva raíz dentro de un bloque de ubicación. La directiva raíz le dice a Nginx que devuelva /image/myimage.jpg en lugar de la ruta totalmente calificada / etc / nginx / html / app1 / image / myimage.jpg ". Entonces, en mi humilde opinión, ¿significa que la configuración de Nginx admite parches relativos?
Webwoman
Aquí, la pregunta es específica de la directiva "root" y si podría admitir la "ruta relativa al archivo conf".
Pothi Kalimuthu
0

No he encontrado una manera de usar rutas relativas o definir variables globales, pero este pequeño truco resuelve mi problema.

Anton Moiseev
fuente
3
¿Qué pequeño truco?
Michael Hampton
No puedo definir la variable, pero puedo usar la mapdirectiva con un solo defaultvalor que desempeñará el papel de la variable para mí.
Anton Moiseev el