#nginx #nginx-config #nginx-location
Вопрос:
Я столкнулся с проблемой с NGINX try_files и $1
Я хочу, чтобы NGINX обслуживал файл, если он уже находится в папке. Если его нет в папке, то запрос следует отправить в Django.
Вот файл в NGINX:
ls /app/processed/instagramwhite.svg
/app/processed/instagramwhite.svg
Вот конфигурация расположения nginx:
location ~* ^/media/(.*.svg)$ {
# return 200 $1; # This statement returns the name of the file when enabled, so regex works
root /app/processed/;
try_files $1 @djangoapp; # This always calls django
}
Вот как я отправляю запрос:
curl -s https://my_domain_here.com/media/instagramwhite.svg
Я ожидаю, что NGINX вернет файл, не переходя в django, так как имя файла из параметра находится в папке. Вместо этого он вызывает django для каждого запроса.
Что я делаю не так? Почему try_files продолжает вызывать django, даже когда файл есть?
Заранее спасибо.
Ответ №1:
Вот решение:
location ~* ^/media/(.*.svg)$ {
# return 200 $1;
root /app/processed/;
try_files /$1 @djangoapp;
}
Вы должны добавить «/» перед «$1», чтобы это сработало. Таким образом, «/$1» работает, но «$1» — нет.