NGINX try_files не может найти «$1» в каталоге

#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» — нет.