1. 1
  2. 2
  3. 3
  4. 4
  5. 5

# конспект · шаг 5 из 5

Конспект: try_files и SPA

выжимка - её можно унести в заметки

try_files - список кандидатов и одно назначение. На нём держатся SPA и почти любая отдача файлов.

Механика

try_files $uri $uri/ =404;          # вернуть код
try_files $uri $uri/ /index.html;   # внутреннее перенаправление на URI
try_files $uri @backend;            # передать в именованный location
try_files $uri /index.php?$args;    # у последнего аргумента своя строка параметров
  • все, кроме последнего, - кандидаты: проверяются как пути на диске;
  • последний - назначение: на существование не проверяется вообще;
  • слеш в конце кандидата ($uri/) означает «проверить как каталог».

Важное про контентные обработчики

try_files только проверяет наличие файла. Если в этом location есть свой контентный обработчик (fastcgi_pass, proxy_pass), файл уйдёт ему, а не клиенту - иначе try_files $uri =404; в php-локации отдавал бы исходники.

SPA

location / {
    try_files $uri $uri/ /index.html;
}

Оболочка отдаётся на любой путь, маршрутизацию делает фронтенд. Ассетам при этом нужен свой location, иначе отсутствующий файл вернёт index.html с кодом 200 вместо честной 404.

Ловушки джокера

  • Одна опечатка, два разных симптома. try_files $uri /index.html; при отсутствующем index.html: если цель попадает в ТОТ ЖЕ location - цикл, rewrite or internal redirection cycle и 500; если в другой - обычный 404. Причина одна и та же, и в обоих случаях error_log называет файл.
  • Один аргумент - ошибка конфигурации (nginx -t поймает). Остальные ошибки этой главы видны только на живых запросах.
  • Внутреннее перенаправление - это новый круг выбора location: назначение может попасть совсем в другой блок, чем ты ожидал.

Комментарии

Пока нет комментариев. Будь первым!

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

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