Справочник

root и alias в nginx: в какой папке искать файлы

Директива root задаёт папку сайта: nginx прибавляет к ней весь путь из адреса. Директива alias заменяет часть адреса, совпавшую с location, другой папкой. root пишут один раз в блоке server, alias — только внутри location.

≈ 6 мин чтения
Содержание 10

Что сделать прямо сейчас

  1. Команды вводятся на сервере: подключитесь к нему по SSH ([как подключиться](/instrukcii/kak-podklyuchitsya-k-vps-po-ssh/)) и набирайте их в том же окне.
  2. Откройте файл сайта: sudo nano /etc/nginx/sites-available/example.com. Вместо example.com — имя файла вашего сайта: список покажет ls /etc/nginx/sites-enabled/. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter.
  3. Найдите строку root: Ctrl+W, слово root, Enter. В ней — папка, где nginx ищет файлы сайта.
  4. Закройте файл без изменений — Ctrl+X — и проверьте, что папка есть и в ней лежит index.html или index.php: ls -l /var/www/example.com. Вместо пути — путь из вашей строки root.
  5. Если путь нужно поменять, откройте файл снова, исправьте строку root. Сохраните файл — Ctrl+O, Enter, затем Ctrl+X — и проверьте настройки: sudo nginx -t. В ответе должны быть слова syntax is ok и test is successful. Тогда примените их: sudo systemctl reload nginx. Если команда ничего не ответила, настройки применены.

Если проверка нашла ошибку, nginx назовёт файл и номер строки, а сайт продолжит работать на старых настройках. Что значит сообщение — Все ошибки nginx.

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

server {
    root /var/www/example.com;
    ...
}
Адрес в браузереКакой файл отдаст nginx
/about.html/var/www/example.com/about.html
/img/logo.png/var/www/example.com/img/logo.png
/индексный файл из папки /var/www/example.com/, например index.html

Путь к файлу — это значение root плюс весь путь из адреса. Параметры после знака ? в путь не входят.

Пишите root в блоке server: его получат все location, где своего root нет. Если для одного location нужна другая папка, задайте root внутри него.

Если root не задан ни в server, ни в location, действует значение по умолчанию root html — папка, заданная при сборке nginx, а не папка вашего сайта.

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

alias отдаёт папку под другим адресом. Например, файлы из /var/www/files/ должны открываться по адресам /download/…:

location /download/ {
    alias /var/www/files/;
}
Адрес в браузереС alias /var/www/files/Если бы стоял root /var/www/files
/download/report.pdf/var/www/files/report.pdf/var/www/files/download/report.pdf

alias заменяет часть адреса, совпавшую с location, — здесь /download/ — на свою папку. root ничего не заменяет и прибавляет путь целиком.

alias пишут только внутри location. В именованном location — с @ — alias не работает: проверка sudo nginx -t выдаст ошибку.

Слэш в конце: пишите одинаково

Если location заканчивается слэшем, alias тоже пишите со слэшем в конце — как в примере выше. nginx склеивает путь как есть и ничего не проверяет:

Как записаноЧто получится
location /download/ и alias /var/www/files/download/report.pdf → /var/www/filesreport.pdf: файла нет, ответ 404
location /download и alias /var/www/files/адрес /download../secret.txt → /var/www/files/../secret.txt, то есть /var/www/secret.txt — файл вне папки

Второй случай опасен: через такой адрес посетитель может скачать файлы из папки на уровень выше — например, настройки сайта с паролем к базе. Слэш в конце у обоих закрывает эту дыру.

alias в location с регулярным выражением

Если location задан регулярным выражением, alias — это полный путь к файлу. Нужную часть адреса берут из скобок через $1:

location ~ ^/photos/(.+\.(jpe?g|png))$ {
    alias /var/www/pictures/$1;
}

Адрес /photos/cat.jpg откроет файл /var/www/pictures/cat.jpg. Как записываются регулярные выражения в location — location в nginx.

Что выбрать

ЗадачаЧто писать
папка сайтаroot в блоке server
папка под другим адресом: /download/ открывает /var/www/files/alias в location, слэш в конце у обоих
имя папки совпадает с адресом: /img/ открывает /srv/static/img/root /srv/static; в location /img/

Если конец alias совпадает с location, alias не нужен. Вместо location /img/ с alias /srv/static/img/ пишите root /srv/static; — результат тот же. А если такой root уже задан в server, отдельный блок для /img/ не нужен вовсе.

Права на папки

Рабочие процессы nginx в Ubuntu работают от пользователя www-data — так задано в строке user в nginx.conf. Чтобы отдать файл, ему нужно право читать этот файл и проходить во все папки на пути к нему. Если прав нет, посетитель получит 403, а в журнале будет Permission denied — как проверить и исправить. Какие права ставить — Права на файлы сайта.

Ошибки и как их исправить

Что видитеЧто делать
404, в журнале open() "…" failed (2: No such file or directory)файла по этому пути нет: сравните путь из журнала с тем, где файл лежит на самом деле
в пути из журнала папка и имя файла склеились без слэшадобавьте слэш в конце alias
403, в журнале (13: Permission denied)нет прав на файлы
403, в журнале directory index of "…" is forbiddenв папке нет индексного файла
"alias" directive is duplicate, "root" directive was specified earlierв одном location стоят и root, и alias: оставьте одну строку
the "alias" directive cannot be used inside the named locationalias стоит в блоке с @: замените его на root

Источники

Сверено 14 октября 2026 года.

Что почитать дальше