
Para mi servidor NGINX tengo un servidor virtual configurado solo para distribuir contenido estático. De momento estoy intentando configurarlo para que las imágenes tengan fecha de caducidad. Sin embargo, cuando creo una directiva de ubicación para esto, todo resulta en un 404.
Mi configuración en este momento 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, en, 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 dice404 No encontrado.
Sin embargo, si elimino location /images
y cambio location /
a lo siguiente...
location / {
root /srv/www/static;
}
¡Funciona! ¿Qué estoy haciendo mal aquí?
Respuesta1
Su configuración sigue la configuración de nginxtrampasDeberías leerlo antes de configurar nginx.
Para responder a su pregunta, no debe definir root
la ubicación, defínala una vez y la etiqueta de ubicación le permitirá asignar acceso automáticamente a directorios específicos.
Además, en lugar de definir una raíz personalizada para el directorio de imágenes, utilice try_files
. El directorio $uri
del mapa se asignará con ./images/
/static/images/
Pruebe 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;
}
}