1. Location作用
Location指令作用是可以根据用户请求URI来执行不同的应用,其实就是根据用户请求的网站的地址URL匹配,匹配成功即进行相关的操作。
2. Location语法
Location使用的语法例子为:
location [ = | ~ | ~* | ^~ ] uri {
...
}
Location的语法说明见下表。
对Location语法列表说明上述语法中的URI部分是关键,这个URI可以是普通的字符串地址路径或者是正则表达式,当匹配成功则执行后面大括号里面的相关指令。正则表达式的前面还可以有~或~*等特殊的字符。
这两种特殊字符~或~*匹配的区别为:“~”用于区分大小写(大小写敏感)的匹配;“~*”用于不区分大小写的匹配。还可以用逻辑操作符!对上面的匹配取反,即!~和!~*。此外,“^~”作用是在常规的字符串匹配检查之后,不做正则表达式的检查,即如果最明确的那个字符串匹配的Location配置中有此前缀,那么不做正则表达式的检查。
3. Location匹配示例
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
在上述Location配置中,当用户请求“/”时将匹配configuration A,当用户请求“/index.html”将匹配configuration B;当用户请求“/documents/document.html”时将匹配configuration C;当用户请求“/images/1.gif”时将匹配configuration D;当用户请求“/documents/1.jpg”时将匹配configuration E。
不同URI对应的配置4. Location匹配示例
下面是官方给出的Location示例,我们通过实例来验证不同的Location标签生效的顺序,Nginx的配置文件为:
[root@web01 conf]# cp extra/01_www.conf{,.ori}
[root@web01 conf]# vi extra/01_www.conf
server {
listen 80;
server_name www.etiantian.org etiantian.org;
location / {
return 401;
}
location = / {
return 402;
}
location /documents/ {
return 403;
}
location ^~ /images/ {
return 404;
}
location ~* \.(gif|jpg|jpeg)$ {
return 500;
}
access_log logs/access_www.log main gzip buffer=12k flush=5s;
}
检查语法并使得修改的配置生效:
[root@web01 conf]# nginx -t
nginx: the configuration file /application/nginx-1.16.0//conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.16.0//conf/nginx.conf test is successful
[root@web01 conf]# nginx -s reload
然后以Linux客户端为例对上述Location匹配进行真实测试,配置hosts文件如下。
[root@web01 conf]# tail -1 /etc/hosts
192.168.9.7 www.etiantian.org bbs.etiantian.org blog.etiantian.org etiantian.org
实验结果如下:
[root@web01 conf]# curl -s -o /dev/null -I -w "%{http_code}\n" http://www.etiantian.org
402
[root@web01 conf]# curl -s -o /dev/null -I -w "%{http_code}\n" http://www.etiantian.org/
402
[root@web01 conf]# curl -s -o /dev/null -I -w "%{http_code}\n" http://www.etiantian.org/index.html
401
[root@web01 conf]# curl -s -o /dev/null -I -w "%{http_code}\n" http://www.etiantian.org/
documents/document.html
403
[root@web01 conf]# curl -s -o /dev/null -I -w "%{http_code}\n" http://www.etiantian.org/
images/1.gif
404
[root@web01 conf]# curl -s -o /dev/null -I -w "%{http_code}\n" http://www.etiantian.org/documents/1.jpg
500
[root@web01 conf]# curl -s -o /dev/null -I -w "%{http_code}\n" http://www.etiantian.org/
oldboy/
401
[root@web01 conf]# curl -s -o /dev/null -I -w "%{http_code}\n" http://www.etiantian.org/
abc/
401
用户请求的URI说明1
用户请求的URI说明2
用户请求的URI说明3
从以上多个Location的配置匹配可以看出匹配的优先顺序,具体见下表。
不用URI及特殊字符组合匹配的顺序说明企业应用:可以匹配任意URI地址,然后做特定的事情,例如:匹配静态扩展名,然后,把请求发给静态服务器,实现动静分离。
网友评论