root и alias

Тема дорожной карты · Nginx

Директивы root и alias обе сопоставляют URL-пути с расположениями в файловой системе в Nginx, однако различаются по способу построения итогового пути и нередко путаются у начинающих при настройке веб-сервера. При использовании root Nginx добавляет полный URI запроса к корневому пути — например, root /var/www/html в сочетании с запросом /images/logo.png разрешается в /var/www/html/images/logo.png. Директива alias заменяет совпавший префикс location указанным путём — например, location /images/ { alias /var/www/assets/; } сопоставляет /images/logo.png с /var/www/assets/logo.png, убирая префикс локейшена перед добавлением оставшейся части. Распространённая ловушка: alias требует завершающего слеша, когда шаблон location также заканчивается слешем, тогда как для root это не обязательно. Правильный выбор между root и alias необходим при отдаче статических файлов из нестандартных расположений файловой системы или когда несколько блоков location в блоке server Nginx должны указывать на разные деревья директорий.

Как это работает

root и alias — одна из сильных сторон nginx: раздача файлов с диска быстрее почти любого другого варианта. Директивы: root /path (префикс ФС для URI), index index.html, try_files $uri $uri/ =404 (SPA fallback-паттерн), sendfile on, tcp_nopush on, tcp_nodelay on. Cache-заголовки через expires 1y; + add_header Cache-Control "public, immutable". gzip_static on — для раздачи pre-compressed файлов.

Когда применять

Nginx — для статики (HTML, JS, CSS, картинки, шрифты) и fall-through на backend для /api/*. Дальний Cache-Control — на hash-версионированные ассеты (/static/app.a3f4b.js). try_files — для SPA-роутинга: любой неизвестный путь возвращает index.html. Всегда gzip on + gzip_types text/plain text/css application/javascript application/json; рассмотрите Brotli (brotli on) для современных клиентов.

Типичные ошибки

Ловушки root и alias: огромные файлы без sendfile on (медленно + высокий CPU); нет Cache-Control (браузеры fetch на каждый запрос); раздача несжатого текста (5× bandwidth-штраф); неверные MIME-типы для шрифтов (браузеры отказывают); долго закешированный HTML указывает на версионированный JS, удалённый при деплое (белая страница). Atomic deploy + Cache-Control: no-store на HTML.

Связанные понятия

Полезные ресурсы