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