nginx关于root与alias的区别

李衮
• 阅读 5317

结论

配置demo:

location xxx {
    root yyy
}

浏览器访问 xxx,实际访问的是 yyy/xxx
浏览器访问 xxx/abc.html,实际访问的是 yyy/xxx/abc.html
浏览器访问 xxx/ccc/abc.html,实际访问的是 yyy/xxx/ccc/abc.html

结论: root属性,会把root的值(这里是yyy)加入到访问路径(locaition)之前

配置demo:

locaiton xxx {
    # alias必须以 / 结束,否则无效
    alias yyy/ 
}

浏览器访问 xxx,实际访问的是 yyy
浏览器访问 xxx/abc.html,实际访问的是 yyy/abc.html
浏览器访问 xxx/ccc/abc.html,实际访问的是 yyy/ccc/abc.html

结论:alias属性,会把alias的值(这里是yyy)替代访问路径匹配的部分(这里是xxx)

示例

nginx的目录结构如下:

nginx/
    -html/
        -index.html
    -logs/
        - access.log
    -conf/
        -nginx.conf

1) 这种配置,http://localhost:8086/access.log,能看到 nginx/logs/access.log,但就别指望能访问 html目录下的文档了

server {
    listen       8086;
    server_name  localhost;
    location / {
        root   logs;
    }
}

2) 这种配置,访问 http://localhost:8086/log/access.log,能看到 nginx/logs/access.log;
访问 http://localhost:8086/, 能看到 nginx/html/index.html

server {
    listen       8086;
    server_name  localhost;
    location / {
        root   html;
        index  index.html index.htm;
    }
    # 配置成 location /log/ 或 location /log 都可以
    location /log/ {
        # 不能写成logs, 必须已 / 结束
        alias logs/;
        # 以下配置没用也可以,只是方便你输入 localhost:8086/log/ 后能,看到nginx/logs/目录下的所有文件
        autoindex on;
    }
}

3) 这种配置,访问 http://localhost:8086/logs/access.log,能看到 nginx/logs/access.log;
访问 http://localhost:8086/, 能看到 nginx/html/index.html

server {
    listen       8086;
    server_name  localhost;
    # http://localhost:8086/ 访问的是
    # nginx/html/  (然后会自动显示 index.html 或 index.htm,如果存在这两个文件之一)
    # 啰嗦的注释: nginx/html(html是root的值)/(/是location的值)
    location / {
        root   html;
        index  index.html index.htm;
    }
    # http://localhost:8086/logs/ 访问的是
    # nginx/./logs/
    # .是root的值,logs是location的值
    # 请与第4种错误配置进行比较,深入理解root属性
    location /logs/ {
        # 写成./也可以
        root .;
    }
}

4) 错误的配置

server {
    listen       8086;
    server_name  localhost;
    location / {
        root   html;
        index  index.html index.htm;
    }
    # 这样子配置是错的, 请与第三种配置比较一下
    # 关键点:root属性会把root的值加入到最终路径之前
    # 即: http://localhost:8086/logs/access.log访问的是:
    # nginx/logs/logs/access.log
    # 因为: nginx/logs(root的值)/logs(locaition的值)/access.log,
    location /logs/ {
        root /logs/;
    }
}

节选:https://www.cnblogs.com/zhang... 这段话:
root属性指定的值是要加入到最终路径的,所以访问的位置变成了 root的值/locaiton的值。而我不想把访问的URI加入到路径中。所以就需要使用alias属性,其会抛弃URI,直接访问alias指定的位置

参考:
https://www.cnblogs.com/zhang...
https://www.cnblogs.com/kevin...

点赞
收藏
评论区
推荐文章
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
前端尾随者 前端尾随者
4年前
sourceTree 添加 ssh key 方法
1.使用git客户的生成公私钥:id\rsa、id\rsa.pub1.1设置Git的username和email:$gitconfigglobaluser.name"xxx"$gitconfig\globaluser.email"xxx.mail@xxx.com"1.2.生成SSH密钥过程:1.2.1.检查是不是已经存在密钥(
Wesley13 Wesley13
4年前
SAE 部署遇到的问题
1\. contextPath问题   在SAE环境下contextPath是/1/xxx而非我们通常的/xxx。用jfinal的得注意了: JFinalFilter得修改一下注释掉下面2行:if(contextPathLength!0)targettarget.su
Wesley13 Wesley13
4年前
Vivado下生成及烧写MCS文件
Jtag模式:1、打开OpenHardwareManager2、 ToolsAutoConnect3、TCL输入:write\_cfgmemformatMCSsize128interfaceBPIx16loadbit"up0x0xxx.bit"xxx.mcs4、AddConfigurationM
Wesley13 Wesley13
4年前
NGINX 文件类型解释漏洞整理
nginx文件类型错误解析漏洞www.xxx.com/1.jpg内容为PHP代码,如<?phpphpinfo();?后面加任意.phpwww.xxx.com/1.jpg/xxx.php导致代码被执行php.inicgi.fix\_pathinfo1PHP\_INI\_ALL
Stella981 Stella981
4年前
Git 手册
gitinit                                                 初始化本地git仓库(创建新仓库)gitconfigglobaluser.name"xxx"                      配置用户名gitconfigglobaluser.emai
Wesley13 Wesley13
4年前
mysql ubuntu 开启3306端口,设置远程访问
远程登陆数据库的时候出现了下面出错信息:ERROR2003(HY000):Can'tconnecttoMySQLserveron'xxx.xxx.xxx.xxx',经过今天下午的反复纠结,关于MySql数据库无法远程连接的问题可以归结为以下几点:1).没有授予相应的权限:例如,你想root使用12345
Wesley13 Wesley13
4年前
Velocity的模板中访问公有成员变量
velocity模板中的访问对象属性,对于POJO对象来说,必须符合JavaBean的规范,也就是${obj.xxx}这样的访问会转换到obj.getXxx()这个方法的调用上。对于一些需要直接访问公用成员变量的对象(比如obj中直接有xxx变量),就不行了。官方配置文档(https://www.oschina.net/action/GoTo
Stella981 Stella981
4年前
Angular技巧汇总
一、声明全局的类型定义  声明项目的全局类型,同时不需要在各个Ts文件中import{XXX}from'xxx' ,就能直接引用!方法是:     增加src/typings.d.ts文件,在文件中增加 interfaceIName{ name:string;}的类型定义。   那么
Stella981 Stella981
4年前
SpringBoot2.1.3修改tomcat参数支持请求特殊符号
最近遇到一个问题,比如GET请求中,key,value中带有特殊符号,请求会报错,见如下URL:http://xxx.xxx.xxx:8081/aaa?key1val1&a.\\.id123&ba\1\现在,我们进入boot启动类,添加如下代码即可:publicclassDemoApp{   publicstatic
Easter79 Easter79
4年前
SpringBoot2.1.3修改tomcat参数支持请求特殊符号
最近遇到一个问题,比如GET请求中,key,value中带有特殊符号,请求会报错,见如下URL:http://xxx.xxx.xxx:8081/aaa?key1val1&a.\\.id123&ba\1\现在,我们进入boot启动类,添加如下代码即可:publicclassDemoApp{   publicstatic