我正在配置 nginx,遇到了“^~”,它似乎具有与“~”类似的功能。我阅读了文档这里但我仍然不清楚。那么以下位置有何不同?
location ~ /images/* {
try_files $uri $uri/ @images;
}
location ^~ /images/* {
try_files $uri $uri/ @images;
}
答案1
~
和^~
完全不相似。第一个表示区分大小写的正则表达式匹配(~*
不区分大小写时相同),但第二个变体^~
表示如果此位置块匹配,则nginx
必须停止搜索更好的(正则表达式)匹配。它本身根本不是正则表达式匹配。
例如:如果您有如下位置块,
location /images/ {
# variant 1
}
location ~* .(png|gif|ico|jpg|jpeg)$ {
# variant 2
}
并且具有类似 的 URI images/test1.png
,nginx
则首先将变体 1 视为可能的匹配,但继续搜索其他位置块,最终使用变体 2 作为最长匹配块,并且仅在未找到更好的匹配块时才使用变体 1。在此示例中,images/test2.tif
将仅与变体 1 匹配。
然而,如果你有
location ^~ /images/ {
# variant 1
}
作为变体 1,nginx 将看到该匹配并立即使用它,而无需进一步搜索更好的正则表达式匹配。