La directive de localisation ne fonctionne pas


10

Pour mon serveur NGINX, j'ai un serveur virtuel configuré juste pour diffuser du contenu statique. En ce moment, j'essaie de le configurer pour que les images aient une date d'expiration. Cependant, lorsque je crée une directive d'emplacement pour cela, tout se traduit simplement par un 404.

Ma configuration ressemble maintenant à ceci:

/srv/www/static.conf

server {
    listen                          80;
    server_name                     static.*.*;

    location / {
            root                    /srv/www/static;
            deny                    all;
    }

    location /images {
            expires                 1y;
            log_not_found           off;
            root                    /srv/www/static/images;
    }
}

Remarque, ce fichier est inclus à partir de /etc/nginx/nginx.conf, dans une directive http

Je suis en train d'accéder à l'image, à, disons ... static.example.com/images/screenshots/something.png. Effectivement, l'image existe également à /srv/www/static/images/screenshots/something.png. Cependant, aller à cette adresse ne fonctionne pas et me dit simplement 404 Not Found .

Cependant, si je supprime location /imageset modifie location /ce qui suit ...

location / {
    root /srv/www/static;
}

Ça marche! Qu'est-ce que je fais mal ici?

Réponses:


14

Votre configuration suit les pièges de configuration de nginx Vous devez la lire avant de configurer nginx.

Pour répondre à votre question, vous ne devez pas définir l' rootemplacement, définissez-le une fois et la balise d'emplacement vous permettra automatiquement d'attribuer l'accès à des répertoires spécifiques.

Aussi, au lieu de définir la racine personnalisée pour le répertoire d'images, utilisez try_files. Le répertoire $urimappera /images/avec /static/images/.

Essayez cette configuration:

server {
    listen                          80;
    server_name                     static.*.*;
    root                            /srv/www;

    location /static/ {
            deny                    all;
    }

    location /images/ {
            expires                 1y;
            log_not_found           off;
            autoindex               off;
            try_files $uri static/images$uri;
    }
}

Je vous remercie! J'ai lu les pièges, mais je suppose que ma mémoire m'a fait défaut. Cela fonctionne, même si je l'ai légèrement modifié pour mes besoins.
Jesse Brands

Oui, j'en relis moi-même de temps en temps des parties, il y a une raison pour laquelle il a une page wiki séparée pour ça;)
phoops

Si définir à l' rootintérieur locationest une mauvaise pratique, comment se fait-il qu'ils le donnent eux-mêmes dans alias docs / http / ngx_http_core_module.html # ? (voir où il est dit " il vaut mieux utiliser la directive racine à la place ") CORRECTION : D'accord, il semble que ce qui ne va pas est de définir la racine principale dans un emplacement, pas n'importe quelle racine
aexl
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.