665 votes

Nginx--fichier statique servant confusion avec racine & alias

J'ai besoin de servir mon application par le biais de mon serveur d'application à l' 8080, et mes fichiers statiques à partir d'un répertoire sans toucher au serveur d'application. La config nginx j'ai, c'est quelque chose comme cela...

    # 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 config, tout fonctionne bien. Notez que l' root directive est commenté.

Si je activer root et de désactiver l' alias -- il s'arrête de fonctionner. Cependant, quand j'ai retirer la bordure /static/ de la root il commence à travailler à nouveau.

Quelqu'un peut m'expliquer ce qu'il se passe. Veuillez également expliquer clairement et avec beaucoup de détails ce que sont la différence entre root et alias, et de leurs fins.

1472voto

good_computer Points 3368

J'ai trouvé des réponses à mes confusions...

Il y a une différence très importante entre l' root et de la alias directives. Cette différence existe dans la manière dont le chemin d'accès spécifié dans l' root ou alias est traitée.

Dans le cas de l' root directive, le chemin d'accès complet est annexé à la racine , y compris l'emplacement de la partie, alors que dans le cas de l' alias directive, seule la partie du chemin PAS de, y compris l'emplacement de la partie est ajouté à l'alias.

Pour illustrer...

Disons que nous avons la config

        location /static/ {
                root /var/www/app/static/;
                autoindex off;
        }

Dans ce cas le chemin que Nginx va dériver sera

/var/www/app/static/static

Cela va revenir 404 car il n'y a pas d' static/ dans static/

C'est parce que l'emplacement de la partie est ajouté au chemin d'accès spécifié dans l' root. Par conséquent, root, la façon correcte est

        location /static/ {
                root /var/www/app/;
                autoindex off;
        }

D'autre part, avec alias, l'emplacement de la partie obtient abandonné. Donc pour la config

        location /static/ {
                alias /var/www/app/static/;
                autoindex off;
        }

le chemin va être correctement formé comme

/var/www/app/static

Voir la documentation ici: http://wiki.nginx.org/HttpCoreModule#alias

27voto

meloncholy Points 840

Juste un rapide additif à la réponse très utile de @good_computer, j’ai voulu remplacer à la racine de l’URL avec un dossier, mais seulement si elle correspondait à un sous-dossier contenant des fichiers statiques (que j’ai voulu conserver dans le chemin d’accès).

Par exemple, si le fichier demandé est en ou , regardez dans `` .

J’ai obtenu cela fonctionne à l’aide d’une expression régulière.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X