Je dois servir mon application via mon serveur d'applications sur 8080
et mes fichiers statiques à partir d'un répertoire sans toucher au serveur d'applications. La configuration nginx que j'ai est quelque chose comme ça ...
# 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;
}
}
Maintenant, avec cette configuration, tout fonctionne bien. Notez que la root
directive est commentée.
Si j'active root
et désactive le alias
- il cesse de fonctionner. Cependant, lorsque je supprime la fin /static/
de la, root
elle recommence à fonctionner.
Quelqu'un peut-il expliquer ce qui se passe. Veuillez également expliquer clairement et verbalement quelles sont les différences entre root
et alias
et leurs objectifs.
log_format scripts '$document_root | $uri | > $request';
enhttp
section etaccess_log /var/log/nginx/scripts.log scripts;
enserver
section de configuration nginx ..nginx: [emerg] invalid number of arguments in "alias" directive
, et le serveur est tombé en panne lors de son redémarrage.comme dire comme @treecoder
Une image vaut mieux que mille mots
pour
root
:pour
alias
:la source
Dans votre cas, vous pouvez utiliser la
root
directive, car une$uri
partie de lalocation
directive est identique à la dernièreroot
partie de la directive.et la
root
directive s'ajoutera$uri
au chemin.la source
Juste un addendum rapide à la réponse très utile de @ good_computer, je voulais remplacer la racine de l'URL par un dossier, mais seulement si elle correspondait à un sous-dossier contenant des fichiers statiques (que je voulais conserver dans le cadre du chemin).
Par exemple, si le fichier demandé est dans
/app/js
ou/app/css
, regardez dans/app/location/public/[that folder]
.Je l'ai fait fonctionner avec une expression régulière.
la source
alias
est utilisé pour remplacer le chemin de partie d'emplacement (LPP) dans le chemin de demande, tandis que leroot
est utilisé pour être ajouté au chemin de demande.Il existe deux façons de mapper le chemin de la demande sur le chemin du fichier final.
alias
ne peut être utilisé que dans le bloc d'emplacement, et il remplacera l'extérieurroot
.alias
etroot
ne peut pas être utilisé dans le bloc de localisation ensemble.la source
Bloc serveur pour vivre la page statique sur nginx.
la source
En d'autres termes sur la conservation de cette brève: dans le cas de
root
, l'argument emplacement spécifié fait partie du chemin du système de fichiers et de l'URI . D'un autre côté - car l'alias
argument de directive de l'instruction location fait partie de l' URI uniquementDonc,
alias
c'est un nom différent qui mappe certains URI à certains chemins dans le système de fichiers, tandis queroot
ajoute l'argument location au chemin racine donné comme argument à laroot
directive.la source