La directiva de ubicación no funciona

10

Para mi servidor NGINX tengo un servidor virtual configurado solo para distribuir contenido estático. En este momento estoy tratando de configurarlo para que las imágenes tengan una fecha de caducidad. Sin embargo, cuando creo una directiva de ubicación para esto, todo solo resulta en un 404.

Mi configuración ahora se ve así:

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

Tenga en cuenta que este archivo se incluye desde /etc/nginx/nginx.conf, dentro de una directiva http

Estoy intentando acceder a la imagen, a, digamos ... static.example.com/images/screenshots/something.png. Efectivamente, la imagen también existe en /srv/www/static/images/screenshots/something.png. Sin embargo, ir a dicha dirección no funciona y simplemente me dice 404 No encontrado .

Sin embargo, si elimino location /imagesy cambio location /a lo siguiente ...

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

¡Funciona! ¿Qué estoy haciendo mal aquí?

Jesse Brands
fuente

Respuestas:

14

Su configuración sigue las trampas de configuración de nginx. Debe leerla antes de configurar nginx.

Para responder a su pregunta, no debe definir la rootubicación, definirla una vez y la etiqueta de ubicación le permitirá asignar automáticamente el acceso a directorios específicos.

Además, en lugar de definir la raíz personalizada para el directorio de imágenes, use try_files. El directorio de $urimapeo /images/con /static/images/.

Prueba esta configuración:

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;
    }
}
phoops
fuente
¡Gracias! He leído las trampas, pero creo que mi memoria me falló. Esto funciona, aunque lo edité un poco para mis propósitos.
Jesse Brands
Sí releer partes de ella de vez en cuando a mí mismo, hay una razón que tiene una página wiki separado para ella;)
phoops
Si definir rootdentro locationes una mala práctica, ¿por qué lo están haciendo ellos mismos en docs / http / ngx_http_core_module.html # alias ? (vea donde dice " es mejor usar la directiva raíz en su lugar ") CORRECCIÓN : bien, parece que lo que está mal es definir la raíz primaria en una ubicación, no cualquier raíz
aexl