Указано местоположение как резервное в директиве try_files

Указано местоположение как резервное в директиве try_files

У меня возникли проблемы с обработкой маршрутизации в 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;
    }
}

Для приведенной выше конфигурации, когда я посещаюhttp://my_domain/images/xyz.pngилиhttp://мой_домен/images/Я ожидаю, что @not_foundдиректива location будет иметь место, возвращая изображение из /var/www/ep/not_found/not_found.jpg(оно существует), но каким-то образом /var/www/ep/not_found.jpgпробуется path (его не существует). Это приводит к отображению /my403.htmlфайла.

Я хочу использовать подход с именованным местоположением ( @not_found).

Может ли кто-нибудь объяснить, что здесь происходит?

Почему /var/www/ep/not_found/not_found.jpgне обслуживается?

решение1

Вы размещаете /not_found.jpgв конце оператора try_files, что делает его термином URI, что означает, nginxчто будет искать новый locationдля обработки запроса. Вы должны сделать этонетпоследний, например:

try_files /not_found.jpg =404;

Видетьэтот документдля большего.


В качестве альтернативы именованному locationможно использовать:

location /images/ {
        try_files $uri /not_found.jpg;
}
location = /not_found.jpg {
    root /var/www/ep/not_found;
}

Видетьэтот документдля получения подробной информации.

Связанный контент