Nginx root 和 alias

Nginx中root与alias的区别

rootalias 都是 Nginx 中用于指定文件系统路径的指令,但它们的工作方式和使用场景有本质区别。理解它们的差异对正确配置静态资源或 PHP 路由非常重要。


一、核心区别

特性rootalias
作用方式将 URI 拼接到指定路径之后将 URI 替换为指定路径
路径拼接逻辑root + URIalias 路径直接替代 location 的 URI 部分
是否包含 location 路径是(URI 全部保留)否(URI 中匹配 location 的部分被去掉)
适用场景通用,尤其适合根目录或标准路径映射适合将某个 URI 映射到任意非标准目录

二、举例说明

场景 1:使用 root
location /static/ {
    root /var/www;
}
  • 请求:http://example.com/static/style.css
  • Nginx 查找的文件路径:
    /var/www + /static/style.css/var/www/static/style.css

root 会把整个 URI(包括 /static/)拼接到 root 路径后面。


场景 2:使用 alias
location /static/ {
    alias /var/www/assets/;
}
  • 请求:http://example.com/static/style.css
  • Nginx 查找的文件路径:
    /static/ 替换/var/www/assets//var/www/assets/style.css

alias 会去掉匹配的 URI 部分(/static/),再拼上后面的路径。


三、常见错误对比

错误用法:用 root 实现别名效果
# 想让 /static/ 指向 /var/www/assets/
location /static/ {
    root /var/www/assets/;  # 错误!
}
  • 请求 /static/style.css → 实际找的是:
    /var/www/assets//static/style.css(多了一层 /static/)→ 404
正确做法:用 alias
location /static/ {
    alias /var/www/assets/;
}

四、特殊注意点

  1. alias 路径必须以 / 结尾(当 location 以 / 结尾时)
    否则路径拼接错误(导致拼接的路径缺少 /)。

    # 推荐
    location /images/ {
        alias /data/pictures/;
    }
    

    Nginx 对 alias 的处理规则是:将匹配 location 的 URI 前缀部分替换为 alias 指定的路径,其余部分直接拼接。

  2. root 可以放在 serverhttp 块中,全局生效;alias 只能在 location 块中使用

  3. 在 PHP 配置中通常用 root,不用 alias
    因为 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 依赖 $document_root(由 root 定义)。
    若用 alias$document_root 不会更新,会导致 PHP 文件路径错误。

    # 危险:在 PHP location 中用 alias
    location ~ \.php$ {
        alias /app/web/;  # $document_root 仍是 server 级的 root!
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 路径错!
    }
    

    正确做法:用 root,或手动指定 SCRIPT_FILENAME

    location ~ \.php$ {
        alias /app/web/;
        fastcgi_param SCRIPT_FILENAME /app/web$fastcgi_script_name;
    }
    

五、总结口诀

  • root 是“加”:URI 全部加到路径后面。
  • alias 是“换”:把 location 匹配的部分换成指定路径。
需求用哪个
网站根目录是 /var/www/htmlroot /var/www/html;
/css/ 映射到 /opt/static/css/alias /opt/static/css/;
配置 PHP-FPM优先用 root,避免路径混乱
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值