Nginx服务器会首先会检查多个location中是否有普通的uri匹配,如果有多个匹配,会先记住匹配度最高的那个。然后再检查正则匹配,这里切记正则匹配是有顺序的,从上到下依次匹配,一旦匹配成功,则结束检查,并就会使用这个location块处理此请求。如果正则匹配全部失败,就会使用刚才记录普通uri匹配度最高的那个location块处理此请求。
=
URI的定位必须与指定的模式精确匹配。该模式在这里限定为一个简单的文本字符串,不能使用正则表达式:
location = /abcd
这个配置语句:
能匹配上 https://xxx/abcd (严格匹配)
能匹配上 https://xxx/abcd?param1¶m2 (不管查询字符串参数)
不能匹配 https://xxx/abcd/ (结尾斜杠)
不能匹配 https://xxx/abcde (在指定的模式后添加额外的字符)
^~
可以理解为禁止贪婪匹配,因为正常的匹配规则是匹配到字符串后(=号匹配除外),还不死心,还得去看看正则有没有能匹配上的,加上"^~"前缀后,匹配到字符串后就应用本条规则,不再去看正则。
~*
不区分大小写的正则匹配。
location ~* ^/abcd$
这个配置语句:
能匹配上 https://xxx/abcd (严格匹配)
能匹配上 https://xxx/ABCD
能匹配上 https://xxx/abcd?param1¶m2 (不管查询字符串参数)
不能匹配 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¶m2 (不管查询字符串参数)
能匹配上 https://xxx/abcd/ (结尾斜杠)
能匹配上 https://xxx/abcde (在指定的模式后添加额外的字符)
@
@是一个命名标记,这种location不会用于正常的请求,它们通常只用于处理内部的重定向(例如:error_page,try_file)