Necesito servir mi aplicación a través de mi servidor de aplicaciones en 8080
, y mis archivos estáticos desde un directorio sin tocar el servidor de aplicaciones. La configuración nginx que tengo es algo como esto ...
# app server on port 8080
# nginx listens on port 8123
server {
listen 8123;
access_log off;
location /static/ {
# root /var/www/app/static/;
alias /var/www/app/static/;
autoindex off;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Ahora, con esta configuración, todo funciona bien. Tenga en cuenta que la root
directiva está comentada.
Si activo root
y desactivo el alias
- deja de funcionar. Sin embargo, cuando elimino el final /static/
del root
, comienza a funcionar nuevamente.
¿Alguien puede explicar lo que está pasando? También explique de manera clara y detallada cuáles son las diferencias entre root
y alias
, y sus propósitos.
log_format scripts '$document_root | $uri | > $request';
enhttp
sección yaccess_log /var/log/nginx/scripts.log scripts;
enserver
sección de nginx config ..nginx: [emerg] invalid number of arguments in "alias" directive
, y el servidor se cayó durante su reinicio.como decir como @treecoder
Una imagen vale mas que mil palabras
para
root
:para
alias
:fuente
En su caso, puede usar la
root
directiva, porque$uri
parte de lalocation
directiva es la misma que la últimaroot
parte de la directiva.y la
root
directiva se agregará$uri
al camino.fuente
Solo un apéndice rápido a la muy útil respuesta de @ good_computer, quería reemplazar la raíz de la URL con una carpeta, pero solo si coincidía con una subcarpeta que contenía archivos estáticos (que quería conservar como parte de la ruta).
Por ejemplo, si el archivo solicitado está en
/app/js
o/app/css
, busque/app/location/public/[that folder]
.Tengo esto para trabajar usando una expresión regular.
fuente
alias
se utiliza para reemplazar la ruta de la parte de ubicación (LPP) en la ruta de solicitud, mientras que elroot
se usa para anteponerse a la ruta de solicitud.Son dos formas de asignar la ruta de solicitud a la ruta final del archivo.
alias
solo podría usarse en el bloque de ubicación, y anulará el exteriorroot
.alias
yroot
no se pueden usar en el bloque de ubicación juntos.fuente
Bloqueo del servidor para vivir la página estática en nginx.
fuente
En otras palabras, para mantener este resumen: en caso de
root
, el argumento de ubicación especificado es parte de la ruta y el URI del sistema de archivos . Por otro lado, elalias
argumento directivo de la declaración de ubicación es parte de URIEntonces,
alias
es un nombre diferente que asigna cierto URI a cierta ruta en el sistema de archivos, mientras queroot
agrega el argumento de ubicación a la ruta raíz dada como argumento a laroot
directiva.fuente