$document_root

变量 $document_root 返回当前 server 或 location block 的根目录,该目录由 NGINX 配置中定义。 — NGINX Core (HTTP)

$document_root NGINX Core (HTTP)

说明

NGINX 中的 $document_root 变量提供了用于该请求的文件被提供的根目录的文件系统路径。这个目录通常在 server 或 location block 中通过 `root` 指令设置。它的值由对当前请求最具体的 `root` 指令决定。如果在 server block 和 location block 中都存在 `root` 指令,则更具体的 location block 中的值将优先。 该变量在构建文件路径时很有用,尤其是与 `$uri` 或 `$request_filename` 等其他变量结合使用时。当 NGINX 处理传入请求时,会解析配置并根据匹配的 location 指令分配适当的根目录。如果没有设置 `root`,该变量将返回空字符串,在需要有效路径的配置中错误使用可能导致错误。 需要注意的一点是,如果 server block 定义了 `root`,且没有在特定的 location block 中定义 `root` 指令,那么匹配该 server 的所有请求都将使用 server block 的根目录。该变量经常在各种 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` 错误。

在 `try_files` 指令中使用 $document_root 时要小心;如果路径结构不正确,可能会导致意外行为。

`root` 和 `alias` 指令混用会导致混淆,因为它们处理路径的方式不同。