La direttiva sulla posizione non funziona


10

Per il mio server NGINX ho un server virtuale impostato solo per fornire contenuto statico. Al momento sto provando a configurarlo in modo che le immagini abbiano una data di scadenza. Tuttavia, quando creo una direttiva sulla posizione per questo, tutto si traduce in un 404.

La mia configurazione in questo momento è simile a questa:

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

Nota, questo file è incluso da /etc/nginx/nginx.conf, all'interno di una direttiva http

Sto cercando di accedere all'immagine, a, diciamo ... static.example.com/images/screenshots/something.png. Abbastanza sicuro, l'immagine esiste anche a /srv/www/static/images/screenshots/something.png. Tuttavia, andare a detto indirizzo non funziona e mi dice semplicemente 404 Not Found .

Tuttavia, se rimuovo location /imagese cambio location /al seguente ...

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

Funziona! Cosa sto facendo di sbagliato qui?

Risposte:


14

La tua configurazione segue le insidie ​​della configurazione di nginx Dovresti leggerlo prima di configurare nginx.

Per rispondere alla tua domanda, non devi definire la rootposizione, definirla una volta e il tag di posizione ti consentirà automaticamente di assegnare l'accesso a directory specifiche.

Inoltre, invece di definire la radice personalizzata per la directory delle immagini, utilizzare try_files. La $urimappa verrà mappata /images/con /static/images/.

Prova questa configurazione:

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

Grazie! Ho letto le insidie, ma immagino che la mia memoria mi abbia deluso. Funziona, anche se l'ho modificato leggermente per i miei scopi.
Jesse Brands,

Sì,
rileggo

Se definire rootall'interno locationè una cattiva pratica, come mai la stanno donando loro stessi in docs / http / ngx_http_core_module.html # alias ? (vedi dove dice " è meglio usare invece la direttiva root ") CORREZIONE : okay, sembra che ciò che è sbagliato sia la definizione della radice primaria in una posizione, non solo di qualsiasi radice
aexl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.