# конспект · шаг 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: назначение может попасть совсем в другой блок, чем ты ожидал.
Комментарии
Пока нет комментариев. Будь первым!
Оставить комментарий