1

У меня проблема с обработкой маршрутизации в 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://my_domain/images/ я ожидаю, что произойдет директива местоположения @not_found возвращающая изображение из /var/www/ep/not_found/not_found.jpg (он существует), но каким-то образом /var/www/ep/not_found.jpg путь (он не существует). Это приводит к отображению файла /my403.html .

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

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

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

1 ответ1

0

Вы помещаете /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;
}

Смотрите этот документ для деталей.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .