作用
location指令的作用是根据用户请求的URI来执行不同的应用,其实就是根据用户请求的网站地址URI进行匹配,匹配成功即进行相关的操作。
语法
location [ = | ~ | ~* |^~ ] uri {
...
}
上面就是location的语法,上述语法中uri部分是关键,这个uri可以是普通的字符串地址路径,或者是正则表达式,匹配成功后则执行大括号里的相关指令。使用正则表达式的时候前面还可以有~
和~*
等特殊字符。
~
区分大小写,~*
不区分大小写,还可以加!
对匹配结果取反,此外,^~
的作用是在进行常规的字符串匹配检查之后,不做正则表达式的检查,即如果最明确的那个字符串匹配的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
实战
配置location
server {
listen 80;
server_name test.com; #测试的域名
location / {
return 401;
}
location = / {
return 402;
}
location /documents/ {
return 403;
}
location ^~ /images/ {
return 404;
}
location ~* \.(gif|jpg|jpeg)$ {
return 500;
}
}
重启nginx
./sbin/nginx -t
./sbin/nginx -s reload
添加Host解析
123.206.176.xxx test.com #填你的真实ip
测试
(1) 为空或/
=
为精确匹配,优先级最高,不论放置的顺序如何,它都将优先被匹配并执行
(2)/index.html
/
为默认匹配,即如果没有匹配上其他的location,则最后匹配”默认匹配”部分
(3)/documents/documents.html
此部分为路径匹配,即匹配了/documents/,注意后面的/documents/1.gif,这表示没有匹配此处的location,而是匹配了以.gif结尾的location
(4)/images/1.gif
此部分为路径匹配,但是前面加了^~
,所以优先匹配路径,匹配到了就没有匹配以.gif结尾的location
(6)/documents/1.gif
此部分匹配了1.gif,属于扩展名匹配,虽然有/documents/,但还是先匹配了扩展名
在重新体会一下默认匹配的含义,如果都没有匹配到,就匹配默认匹配吗,也就是/