一、语法

Location 是 Nginx一个非常核心配置关于Location,举个简单配置例子

server {
    listen 80;
    server_name 10.0.7.115;
    location / {
        root /data/app/;
        index index.html;
    }
}

访问 http://10.0.7.115:80时候返回的是 /data/app/index.html 文件

Location具体语法

location [ = | ~ | ~* | ^~ ] uri { ... }

重点看方括号中的 [ = | ~ | ~* | ^~ ],其中 | 分隔内容表示可能用到语法,其中:

location = /test {
    return 200 "hello";
}

例如

/test              ok
/test/             not ok
/test2             not ok
/test/2            not ok

location ~ ^/test$ {
    [configuration] 
}

例如

/test              ok
/Test              not ok
/test/             not ok
/test2             not ok

location ~* ^/test$ {     
    [configuration] 
}

例如

/test               ok
/Test               ok
/test/              not ok
/test2              not ok

location ^~ /images/ {    
    [configuration] 
}

例如

/images/1.gif        ok

location / {     
    [configuration] 
}

例如

/index.html           ok
location /test {
    [configuration] 
}

例如

/test                 ok
/test2                ok
/test/                ok

二、匹配顺序

Location定义分为两种:

存在多个 Location时候,匹配的顺序为:

总结

我们举几个简单例子进行说明

请求URI如下

/document

示例一:

配置:

server {
    location /doc {
        [ configuration A ] 
    }
    location /docu {
        [ configuration B ] 
    }
}

匹配结果

configuration B

注:虽然 /doc 也能匹配到,但 顺序上,前缀字符串顺序不重要,按照匹配长度确定

示例二:

server {
    location ~ ^/doc {
        [ configuration A ] 
    }
    location ~ ^/docu {
        [ configuration B ] 
    }
}

匹配结果

configuration A

注:虽然 ~ ^/docu 也能匹配到,但 正则表达式则按照定义顺序

示例三:

server {
    location ^~ /doc {
        [ configuration A ] 
    }
    location ~ ^/docu {
        [ configuration B ] 
    }
}

匹配结果

configuration A

注:虽然 ~ ^/docu 也能匹配到,但 ^~优先级更高

示例四:

server {
    location /document {
        [ configuration A ] 
    }
    location ~ ^/docu {
        [ configuration B ] 
    }
}

匹配结果

configuration B

注:虽然 /document 也能匹配到,但 正则优先级更高

三、rootalias区别

我们这样设置 root时候

location /i/ {
    root /data/w3;
}

请求 /i/top.gif/data/w3/i/top.gif 会被返回

我们这样设置 alias时候

location /i/ {
    alias /data/w3/images/;
}

请求 /i/top.gif/data/w3/images/top.gif 会被返回

两者的区别

四、server 和 location 中的 root

server 和 location 中都可以使用 root,举个例子

server {
    listen 80;
    server_name 10.0.7.115;
        root /data/app/;
        location / {
          root /data/web/;
          index index.html;
    }
}

如果两者都出现,是怎样优先级呢?

简单的来说,就是 就近原则,如果 location 中能匹配到,就是location 中的 root 配置,忽略 server 中的 root,当 location 中匹配不到的时候,则使用 server 中的 root 配置。

原文地址:https://blog.csdn.net/wangzhongshun/article/details/126434539

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_40760.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注