Ubicación nombrada como alternativa en la directiva try_files

Ubicación nombrada como alternativa en la directiva try_files

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_foundque 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.jpgse está intentando la ruta (no existe). Da como resultado la visualización /my403.htmldel 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.jpgno se sirve?

Respuesta1

Se coloca /not_found.jpgal final de la try_filesdeclaración, lo que lo convierte en el término URI, lo que significa que nginxbuscará uno nuevo locationpara 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.

información relacionada