1. 1

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

Конспект раздела: отдаём файлы

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

Раздел про решение №4 для самого частого случая: содержимое лежит файлом на диске.

Путь запроса к файлу

URI  →  root/alias → путь на диске  →  есть файл? отдаём
                                    →  нет? try_files решает, что дальше
                                    →  отдали? навешиваем кеш-заголовки

Три инструмента

Инструмент Отвечает на вопрос
root / alias где на диске искать
try_files что делать, если файла нет
expires / Cache-Control сколько браузер может не спрашивать снова

Формулы, которые надо помнить

root  /var/www/static  +  /images/logo.png  =  /var/www/static/images/logo.png
alias /mnt/pics/       +  location /images/ →  /images/logo.png = /mnt/pics/logo.png

Ловушки раздела списком

  • location /files без слеша при aliasalias-traversal;
  • нет index и autoindex off403, а не 404;
  • try_files $uri /index.html; при отсутствующем файле → цикл и 500;
  • SPA без отдельного location для ассетов → отсутствующий файл отдаёт index.html с кодом 200;
  • no-cache ≠ «не кешировать» (это no-store);
  • expires без always не действует на ошибочные ответы.

Стратегия кеша по типам

Файл Заголовок
app.4f2c1b.js (хеш в имени) max-age=31536000, immutable
index.html no-cache (хранить, но перепроверять)
картинки без версии недолгий max-age + валидатор

Отдача кусками

Range206 Partial Content + Content-Range; за пределами файла - 416. Accept-Ranges: bytes nginx ставит сам, и по нему клиент понимает, что докачка возможна. Сжатый ответ кусками не отдаётся - самая частая причина «докачка не работает».

Чек-лист: что ты должен уметь объяснить

  • Чем alias отличается от root и когда он опасен.
  • Что произойдёт при запросе каталога без index-файла.
  • Почему try_files не отдаёт файл клиенту в php-локации.
  • Три исхода кеширования и когда возникает 304.
  • Почему index.html в SPA нельзя кешировать надолго.

Комментарии

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

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

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