每个server块中可以包含多个location块。在整个Nginx配置文档中起着重要的作用,而且Nginx服务器在许多功能上的灵活性往往在location指令的配置中体现出来。
location块的主要作用:基于Nginx服务器接收到的请求字符串(例如, server_name/uri-string),对除虚拟主机名称(也可以是IP别名)之外的字符串(前例中“/uri-string”部分)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能都是在这部分实现。许多第三方模块的配置也是在location块中提供功能。
# location语法结构。其中,uri变量是待匹配的请求字符串。
# 可以是不含正则表达的字符串,标准uri,如/login等。也可以是包含有正则表达的字符串,正则uri,如.jpg$(表示以.jpg结尾的URL)等。
# 其中方括号里的部分,是可选项,用来改变请求字符串与 uri 的匹配方式。
# 如果uri包含正则表达式,就必须要使用“~”或者“~*”标识,且会将URL编码的uri进行解码后匹配。
# =代表精确匹配,~代表正则匹配,~*代表忽略大小写正则,^~代表禁止正则
# 不添加方括号选项时。Nginx服务器首先在server块的多个location块中搜索是否有标准uri和请求字符串匹配,如果有多个可以匹配,就记录匹配度最高的一个。然后,服务器再用location块中的正则uri和请求字符串匹配,当第一个正则uri匹配成功,结束搜索,并使用这个location块处理此请求;如果正则匹配全部失败,就使用刚才记录的匹配度最高的location块处理此请求。
location [ = | ~ | ~* | ^~ ] uri { ... }匹配顺序模式:
- 首先看所有location中是否有=的location完全匹配,忽略location顺序。如果匹配,搜索完毕;如果不匹配就找到非正则location中最大前缀匹配的location,并记住。
如果最长匹配location前如果有^~,代表不进行后续的正则匹配,搜索完毕;如果没有^~,就进行正则匹配。
- “~”,区分大小写的正则匹配模式,多个location顺序为文本顺序。如果一个正则匹配成功,搜索完毕;不成功就匹配下一个正则;全部不成功,使用最长前缀匹配location,搜索完毕。
- “~
*”,不区分大小写的正则匹配模式,多个location顺序为文本顺序。如果一个正则匹配成功,搜索完毕;不成功下一个正则;全部不成功,使用最长前缀匹配location。
对于以下的Location配置,进行规则测试,默认/不写了
location ~ /Test1/$ {
return 200 'A';
}
location ~* /Test1/(\w+)$ {
return 200 'B';
}
location ^~ /Test1/ {
return 200 'C';
}
location /Test1/Test2 {
return 200 'D';
}
location /Test1 {
return 200 'E';
}
location = /Test1 {
return 200 'F';
}对于上述的location配置,不同的URI请求对应的返回对应的返回值,代表匹配到对应的location。
#返回F,=匹配到F
/Test1
#返回C,匹配到最长规则/Test1/,含有^~前缀,匹配到C
/Test1/
#返回B,匹配到最长规则/Test1/Test2,进行顺序正则匹配到B
/Test1/Test2
#返回D,匹配到最长规则/Test1/Test2,没有正则匹配到,就匹配到D
/Test1/Test2/
#返回B,匹配到最长匹配规则/,正则匹配到B
/test1/Test2「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




