root и alias в nginx: в какой папке искать файлы
Директива root задаёт папку сайта: nginx прибавляет к ней весь путь из адреса. Директива alias заменяет часть адреса, совпавшую с location, другой папкой. root пишут один раз в блоке server, alias — только внутри location.
Содержание 10
Что сделать прямо сейчас
- Команды вводятся на сервере: подключитесь к нему по SSH ([как подключиться](/instrukcii/kak-podklyuchitsya-k-vps-po-ssh/)) и набирайте их в том же окне.
- Откройте файл сайта:
sudo nano /etc/nginx/sites-available/example.com. Вместо example.com — имя файла вашего сайта: список покажетls /etc/nginx/sites-enabled/. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter. - Найдите строку root: Ctrl+W, слово
root, Enter. В ней — папка, где nginx ищет файлы сайта. - Закройте файл без изменений — Ctrl+X — и проверьте, что папка есть и в ней лежит index.html или index.php:
ls -l /var/www/example.com. Вместо пути — путь из вашей строки root. - Если путь нужно поменять, откройте файл снова, исправьте строку 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 location | alias стоит в блоке с @: замените его на root |
Источники
- Документация nginx: root — путь к файлу — значение root плюс путь из адреса; по умолчанию root html.
- Документация nginx: alias — замена части адреса, совпавшей с location; в location с регулярным выражением — полный путь; когда лучше root.
- Исходный код nginx 1.24.0: ngx_http_core_module.c — функция ngx_http_map_uri_to_path склеивает alias с остатком адреса без проверки слэша; тексты ошибок про alias в именованном location и про root и alias в одном блоке.
- Файл nginx.conf из пакета nginx в Ubuntu 24.04 —
worker_processes auto,worker_connections 768,gzip on, журналы в /var/log/nginx/, подключение conf.d и sites-enabled.
Сверено 14 октября 2026 года.
Что почитать дальше
- Настройки nginxкак устроены файлы и блоки, главные директивы.
- try_files в nginxчто отдать, если файла нет.
- location в nginxкак выбирается блок для адреса.
- Права на файлы сайтавладелец и права для папки сайта.
- 404 Not Foundвсе причины и как найти нужную по журналу.
- 403 Forbiddenесли nginx запрещает доступ.