青蛙学Linux—Nginx配置⽂件中的location详解
Nginx配置⽂件中的location部分主要⽤来对于传⼊的URL进⾏匹配到特定的location,并从这个location中定义的⽬录下查请求的⽂件。location部分⽀持正则。
1、location部分详解
我们先来看下f中原有的两段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  127.0.0.1;
#}
关键字location后⾯紧跟的是对于URL的匹配规则,⼤括号⾥⾯的则是这个location的配置,详解如下:
root:定义这个location的查资源的根⽬录,这个⽬录可以是相对路径,也可以是绝对路径
index:定义访问的默认⾸页
在定义location查资源的⽬录时,还可以使⽤alias指令,它与root的区别如下:
# 假设客户端访问的URL为xxx/i/123.gif
alias指令将会在其定义的⽬录下查123.gif这个⽂件
root指令将会在其定义的⽬录下的⼦⽬录i中查123.gif
⼀般建议在location /中使⽤root指令来配置根⽬录,其他locaiton使⽤alias指令。
⽽在第⼆段配置中,location中使⽤了proxy_pass这个模块,proxy_pass模块⼀般⽤于进⾏反向代理。所以location中不仅可以定义root和index,还可以引⽤功能模块。
2、location中的URL匹配部分
预先的定义:假设当前运⾏Nginx主机的IP地址为192.168.0.110,没有配置域名解析,仅通过IP地址访问Nginx。
我们看第⼀节中的第⼀个location,匹配的URL规则为/,定义的根⽬录为html。也就是说,任何对于192.168.0.110的访问都将会在html⽬录下进⾏资源查。这⾥的html⽬录就是⼀个相对⽬录,为Nginx安装⽬录下的html⽬录。
其实,不仅是对192.168.0.110这个主站的访问,对于192.168.0.110站点下的任意资源的访问都会在html⽬录下进⾏查。例如:
访问192.168.0.110/1.jpg,此时在主机上对应的⽬录⽂件为html/1.jpg
访问192.168.0.110/test/1.html,此时在主机上对应的⽬录⽂件为html/test/1.html
location在进⾏URL匹配时⽀持正则表达式,下⾯来看两个location配置:
location ~ .*\.(gif|jpg|png)$ {
nginx和apache区别root    /test;
}
我们来分析下location后⾯的URL匹配部分,~表⽰区分⼤⼩写匹配;.为正则表达式的符号,表⽰匹配除\n之外的任意⼀个字符;*也为正则表达式符号,表⽰匹配前⾯的.⼀次或多次;\为转义字符,表⽰将后⾯的.转义成正常的.⽽不是正则表达式符号;(gif|jpg|png)表⽰匹配gif 或jpg或png中的任意⼀项;$为正则表达式符号,表⽰匹配以前⾯的内容结尾。
所以,这条location的含义为,当URL中以.gif|jpg|png结尾时,在/test⽬录下查相应的资源。
location ~ ^/test/ {
root    /htm;
}
^为正则表达式符号,表⽰匹配以后⾯的内容开头。所以这条location的含义为,当URL中以/test/开头
时,在/htm/test⽬录下查相应的资源。注意:root定义的是根⽬录,所以这⾥对应的主机⽬录应该为/htm/test。
3、location中的URL匹配优先级
location⽀持各种匹配规则,在多个匹配规则下,Nginx对location的处理是有优先级的。
location中的优先级规则为(从上到下优先级依次降低):
等号类型(=),该类型为精确匹配,⼀旦匹配成功则不再查其他匹配项
前缀普通匹配(^~),不⽀持正则表达式;如果有多个location都能匹配的话,优先匹配表达式最长的location
正则表达式匹配,包括~(区分⼤⼩写)和~*(不区分⼤⼩写);正则匹配以从上到下的顺序为优先级,⼀旦匹配⼀个则不再继续匹配常规字符串匹配,如果有多个location都能匹配的话,优先匹配表达式最长的location
⼀个特殊的location:
location = / {
root    /test;
}
此时必须使⽤192.168.0.110/才能匹配到该条规则⽽不是使⽤192.168.0.110,等号类型要求精确匹配才能命中。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。