linux的nginx配置篇:location的匹配规则

nginx配置文件中的location部分主要用于对传入的URL进行匹配到特定的location,并从这个location中定义的目录下查找请求的文件。location部分支持正则。

location部分详细解释:

location配置规则讲解:

location / {
            root   html;
            index  index.html index.htm;
        }
 
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

关键字location后面紧跟的是对于URL的匹配规则,大括号里面的则是这个location的配置,详细如下:
root 定义这个location的查找资源的根目录,这个目录可以是绝对路径,也可以是相对路径
index 定义访问的默认首页

在定义location查找资源的目录时,还可以使用alias指令,他与root的区别如下:

# 假设客户端访问的URL为http://xxx/i/123.gif
alias指令将会在其定义的目录下查找123.gif这个文件
root指令将会在其定义的目录下的子目录i中查找123.gif

一般建议在location /中使用root指令来配置根目录,其他location使用alias指令。
而在第二段配置中,location中使用proxy_pass这个模块,proxy_pass模块一般用于进行反向代理。所以location中不仅可以定义root和index,还可以引用功能模块。

02location中URL匹配部分

预先的定义: 假设当前运行nginx主机的IP地址是192.168.0.110,没有配置域名解析,仅通过IP地址访问nginx。

我们看第一节中的第一个location ,匹配的URL规则是/,定义的根目录为html。也就是说,任何对于http://192.168.0.110的访问都将会在html目录下进行资源查找。这里的html目录就是一个相对目录,为nginx安装目录下的html目录。

其实,不仅是对于http://192.168.0.110这个主站的访问,对于http://192.168.0.110站点下的任意资源的访问都会在html目录下进行查找。例如:

访问http://192.168.0.110/1.jpg 此时主机上对应的目录文件为html/1.jpg
访问http://192.168.0.110/test/1.html 此时在主机上对应的目录文件为html/test/1.html

location在进行URL匹配时支持正则表达式,下面来看两个location配置:

location ~ .*\.(gif|jpg|png)$ {
    root    /test;
}

我们来分析下location后面的URL匹配部分,
~表示区分大小写匹配;
.为正则表达式的符号,表示匹配除\n之外的任意一个字符;
*也为正则表达式符号,表示匹前面的一次或者多次;
\为转义字符,表示将后面的,转义成正常的,而不是正则表达式符号;
(gif|jpg|png)表示匹配GIF或者jpg或者png中的任意一项;
$为正则表达式符号,表示匹配以前面的内容结尾。

所以这条location的含义为,当URL中gif|jpg|png结尾时,在test目录下查找相对应的资源。

location ~ ^/test/ {
    root    /htm;
}

^位正则表达式符号,表示匹配以后面的内容开头。所以这条location的含义为,当URL中以test开头时,在html/test目录下查找对应的资源。
注意:root定义的目录是根目录,所以这里对应的主机目录应该是/html/test

03location中URL匹配优先级
location支持各种匹配规则,在多个匹配规则下,nginx毒地location的处理是有优先级的。
location中的优先级规则是(从上到下有优先级依次降序):

等号类型(=) 该类型为精准匹配,一旦匹配成功则不再查找其他匹配项。
前缀普通匹配(^~) 不支持1正则表达式;如果有多个location都能匹配的话,优先匹配表达式最长location
正则表达式匹配,包括(区分大小写)和*(不区分大小写);正则匹配以上到下的顺序为优先级,一旦匹配一个则不再继续匹配
常规字符串匹配,如果有过个location都能匹配的话,优先配置表达式最长的location

一个特殊的location:

location = / {
    root    /test;
}

此时必须使用http://192.168.0.110才能匹配到该条规则而不是使用http://192.168.0.110 等号类型要求精准匹配才能命中。

发布了154 篇原创文章 · 获赞 14 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_42506599/article/details/104237861