nginx location 匹配顺序

Nginx服务器会首先会检查多个location中是否有普通的uri匹配,如果有多个匹配,会先记住匹配度最高的那个。然后再检查正则匹配,这里切记正则匹配是有顺序的,从上到下依次匹配,一旦匹配成功,则结束检查,并就会使用这个location块处理此请求。如果正则匹配全部失败,就会使用刚才记录普通uri匹配度最高的那个location块处理此请求。

=

URI的定位必须与指定的模式精确匹配。该模式在这里限定为一个简单的文本字符串,不能使用正则表达式:

location = /abcd

这个配置语句:

能匹配上 https://xxx/abcd (严格匹配)

能匹配上 https://xxx/abcd?param1&param2 (不管查询字符串参数)

不能匹配 https://xxx/abcd/ (结尾斜杠)

不能匹配 https://xxx/abcde (在指定的模式后添加额外的字符)

^~

可以理解为禁止贪婪匹配,因为正常的匹配规则是匹配到字符串后(=号匹配除外),还不死心,还得去看看正则有没有能匹配上的,加上"^~"前缀后,匹配到字符串后就应用本条规则,不再去看正则。

~*

不区分大小写的正则匹配。

location ~* ^/abcd$

这个配置语句:

能匹配上 https://xxx/abcd (严格匹配)

能匹配上 https://xxx/ABCD

能匹配上 https://xxx/abcd?param1&param2 (不管查询字符串参数)

不能匹配 https://xxx/abcd/(因为指定了正则表达式)

不能匹配 https://xxx/abcde(额外字符,正则不匹配)

~

客户端请求的URI与指定的正则表达式匹配必须区分大小写。

location ~ ^/abcd$

这个配置语句:

能匹配上 https://xxx/abcd (严格匹配)

不能匹配 https://xxx/ABCD (区分大小写)

不能匹配 https://xxx/abcd/(因为指定了正则表达式)

不能匹配 https://xxx/abcde(额外字符,正则不匹配)

当匹配前缀是空的时候,URI的定位必须以指定模式开始,不可以使用正则表达式。

location /abcd

这个配置语句:

能匹配上 https://xxx/abcd (严格匹配)

能匹配上 https://xxx/abcd?param1&param2 (不管查询字符串参数)

能匹配上 https://xxx/abcd/ (结尾斜杠)

能匹配上 https://xxx/abcde (在指定的模式后添加额外的字符)

@

@是一个命名标记,这种location不会用于正常的请求,它们通常只用于处理内部的重定向(例如:error_page,try_file)

猜你喜欢

转载自tzhennan.iteye.com/blog/2405350