Рейтинг:0

try_files, похоже, ищет не в том каталоге

флаг hu

Я пытаюсь настроить try_files, но сталкиваюсь с проблемой: похоже, резервный файл «empty.png» не подбирается, хотя он находится по адресу /path/to/old_cache_data/empty.png. Файлы реально существующие (т.е. без фолбека) находятся без проблем. Также достаточно интересно, что я получаю не nginx 404, а страницу 404 из приложения, которое обрабатывается proxy_pass ниже.

Материал, который я пробовал до сих пор:

  • Удаление ведущей косой черты, что приводит к этой любопытной ошибке: open() "/usr//htmlempty.png" не удалось (2: нет такого файла или каталога), Мне это кажется странным, так как /usr/html нигде не указан как запасной путь.
  • Указание абсолютного пути (т. try_files $uri /path/to/old_cache_data/empty.png;)

Соответствующие правила:

# устаревший статический кеш
расположение /кэш/ {
    корень /путь/к/old_cache_data;
    try_files $uri /пусто.png;
}

# пройти через
место расположения / {
    [куча прокси-настроек]
    proxy_pass [целевой URL];
}

Итак, не уверен, где именно я «держу это неправильно». Это выглядит как try_files не поднимает на корень в локации, но каким-то образом делает странный запасной вариант.

РЕДАКТИРОВАТЬ: я обнаружил, что поместив пустой.png в подпапку «кэш» и изменив try_files на try_files $uri /cache/empty.png; на самом деле работает. Я не понимаю, почему это так.

Рейтинг:1
флаг gr

Как заявила документация, последний параметр try_files директива может быть

  • новый URI;
  • Код ошибки HTTP: =код;
  • Идентификатор именованного местоположения: @название местоположения.

Ты используешь /пусто.png который рассматривается как новый URI, который не падает под местоположение/кэш {...} таким образом обслуживается место расположения / { ... }. Когда вы удаляете ведущую косую черту, вы получаете новый URI пустой.png что не подпадает ни под одно из ваших местоположений, включая место расположения / { ... }. Каждый сервер блок имеет некоторый корневой путь по умолчанию префикс/html где префикс указан в время компиляции и можно проверить с помощью нгинкс-V команда (похоже, ваша /уср/). Так, как говорит корень директива документация,

Путь к файлу создается простым добавлением URI к значению корень директива.

что дает нам префикс /уср/ + корень по умолчанию /html + URI пустой.png = /usr//htmlпусто.png.

Когда вы меняете последний try_files параметр к /кэш/пусто.png, этот URI обслуживается с тем же местоположение/кэш {...} блок с файлом /путь/к/old_cache_data + /кэш/пусто.png = /path/to/old_cache_data/cache/empty.png. И если вы правильно понимаете всю приведенную выше информацию, вы должны заметить, что с вашей конфигурацией вы не можете получить доступ к каким-либо файлам в /путь/к/old_cache_data папку, кроме тех, что находятся в /путь/к/old_cache_data/кэш подпапка. Проверьте разницу между корень и псевдоним директивы для лучшего понимания.

флаг hu
Аааа, это действительно имеет большой смысл. Да, я неправильно понял, что это просто файл, и не думал об этом как об еще одном URL-адресе, который подвергается переоценке. Большое спасибо :)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.