当前位置: 代码迷 >> 综合 >> Nginx 中 alias 和 root 的区别
  详细解决方案

Nginx 中 alias 和 root 的区别

热度:53   发布时间:2023-12-08 12:49:08.0

文章目录

        • 一、语法说明
        • 二、试验论证
        • 三、经验总结

一、语法说明
  • alias

    • 采用 alias 配置的资源目录必须是准确的。localtion 正则匹配到 path 后,直接在 alias 定义的目录下查找。

    • 采用 alias 标签配置资源路径的 localtion 块中不能使用 rewritebreak

    • 采用 alias 标签配置的资源目录后面必须要加上 / 符号。

  • root

    • 采用 root 配置资源目录,实际资源目录必须设置为 localtion 正则匹配的 path 关键字的上一级目录。

    • 这个 path 正则匹配的关键字也必须是 root 后面定义路径中真实存在的资源目录,因为 localtion 正则匹配到 path 后,根据 root 再带上 path 本身资源路径名称去查找资源。

P.S

  • 采用 alias 配置的资源目录,localtion 正则匹配的 path 关键字后面不带 / 符号,那么请求访问这个 pathurl 地址中带不带 / 都不会影响访问,因为此机制在访问的时候, Nginx 会自动加上 /

  • 采用 alias 配置的资源目录,localtion 正则匹配的 path 关键字后面带上 / 符号,那么请求访问这个 pathurl 地址中必须带上 /,因为此机制 Nginx 不会自动加上 /,如果不手动加上 / ,那么在访问的时候就会出现 404所以建议 localtion 正则匹配的 path 关键字后面不带 / 符号,要求alias 标签配置的资源目录后面必须要加上 / 符号

  • 采用 root 配置的资源目录,localtion 正则匹配的 path 后面带不带 / 都不会影响访问

二、试验论证
  1. 前置约定

    假设 Nginx 配置的域名为 www.rambo123.com

  2. 资源目录文件夹的名称和 path 一致

    示例一

    location /shop/ {
          alias /opt/web/shop/;index  index.html index.htm;
    }
    

    以上通过 alias 配置资源目录,访问 www.rambo123.com/shop/index.html 实际指定的是 /opt/web/shop/index.html

    P.S

    alias 指定的资源目录后面必须要加上 / ,否则无法访问

    示例二

    采用 root 改造示例一

    localtion /shop/ {
          root /opt/web/;index  index.html index.htm;
    }
    

    以上通过 root 改造示例一的配置以后,达到的访问效果一致。通过 root 配置资源目录,访问 www.rambo123.com/shop/index.html 实际指定的是 /opt/web/shop/index.html

  3. 资源目录文件夹的名称和 path 不一致

    示例三

    localtion /web/ {
          alias /opt/www/html/;index  index.html index.htm;
    }
    

    以上通过 alias 配置资源目录,访问 www.rambo123.com/web/index.html 实际指定的是 /opt/www/html/index.html

    示例四

    采用 root 改造示例三

    如果非要采用 root 指定资源的方式来改造示例三,就只能通过软连的方式来实现

    # 为 html 创建软链接(保持 /opt/www/html 与 /opt/www/web 内容一致)
    ln -s /opt/www/web /opt/www/html # 在进行 root 的配置
    lcation /web/ {
          root /opt/www/;index index.html index.htm;
    }
    
三、经验总结
  • localtion / 中配置 root 目录

  • location /path 中配置 alias 虚拟目录

  相关解决方案