
Tengo problemas para entender el procesamiento de enrutamiento en Nginx.
server {
listen 80;
listen [::]:80;
server_name my_domain;
root /var/www/ep;
index index.html;
error_page 403 404 /my403.html;
location /images/ {
try_files $uri @not_found;
}
location @not_found {
root /var/www/ep/not_found;
try_files NON_EXISTENT_1 /not_found.jpg;
}
}
Para la configuración anterior, cuando visitohttp://mi_dominio/images/xyz.pngohttp://mi_dominio/imagenes/Espero @not_found
que se ejecute la directiva de ubicación devolviendo una imagen /var/www/ep/not_found/not_found.jpg
(existe) pero de alguna manera /var/www/ep/not_found.jpg
se está intentando la ruta (no existe). Da como resultado la visualización /my403.html
del archivo.
Quiero utilizar el enfoque de ubicación con nombre ( @not_found
).
¿Alguien podría explicar qué está pasando aquí?
¿Por qué /var/www/ep/not_found/not_found.jpg
no se sirve?
Respuesta1
Se coloca /not_found.jpg
al final de la try_files
declaración, lo que lo convierte en el término URI, lo que significa que nginx
buscará uno nuevo location
para procesar la solicitud. deberías hacerlonoúltimo, por ejemplo:
try_files /not_found.jpg =404;
Vereste documentopara más.
Como alternativa a un nombre location
, puedes usar:
location /images/ {
try_files $uri /not_found.jpg;
}
location = /not_found.jpg {
root /var/www/ep/not_found;
}
Vereste documentopara detalles.