$document_root

Переменная $document_root возвращает корневой каталог текущего server- или location-блока, как определено в конфигурации NGINX. — NGINX Core (HTTP)

$document_root NGINX Core (HTTP)

Описание

Переменная $document_root в NGINX предоставляет путь в файловой системе к корневому каталогу, из которого для данного запроса обслуживаются файлы. Этот каталог обычно задаётся в server- или location-блоке с помощью директивы `root`. Её значение определяется наиболее конкретной директивой `root`, применимой к текущему запросу. Если директива `root` присутствует и в server-блоке, и в location-блоке, значение более специфичного location-блока будет иметь приоритет. Эта переменная полезна для построения путей к файлам, особенно в сочетании с другими переменными, такими как `$uri` или `$request_filename`. Когда NGINX обрабатывает входящие запросы, он разбирает конфигурацию и назначает соответствующий корневой каталог на основе совпавшей location-директивы. Если `root` не задан, переменная вернёт пустую строку, что может привести к ошибкам при использовании в конфигурациях, ожидающих действительный путь. Важно отметить, что если server-блок задаёт директиву `root` и не существует конкретного location-блока с директивой `root`, все запросы, соответствующие этому серверу, будут использовать корневой каталог из server-блока. Переменная часто используется в различных директивах NGINX, включая `try_files`, `rewrite` и `alias`, чтобы изменить способ обработки запросов в зависимости от определённой структуры файлов.

Пример конфига

server {
    listen 80;
    server_name example.com;
    root /var/www/example.com;

    location / {
        try_files $uri $uri/ =404;
    }
}

location /images/ {
    root /var/www/images;
}

# Example usage in a log: 
access_log /var/log/nginx/access.log "[$document_root]";

Подсистема

http

Кэшируется

Нет

Контексты

http, server, location, if

Если директива `root` не определена, $document_root останется пустым, что может привести к ошибкам `404 Not Found`, если обращаться к нему напрямую.

Будьте осторожны при использовании $document_root внутри директивы `try_files`; это может привести к неожиданному поведению, если пути указаны неверно.

Путать директивы `root` и `alias` может привести к путанице, так как они обрабатывают пути по-разному.