nginx 配置中 ^~ 和 ~ 有什么区别

nginx 配置中 ^~ 和 ~ 有什么区别

我正在配置 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.pngnginx则首先将变体 1 视为可能的匹配,但继续搜索其他位置块,最终使用变体 2 作为最长匹配块,并且仅在未找到更好的匹配块时才使用变体 1。在此示例中,images/test2.tif将仅与变体 1 匹配。

然而,如果你有

location ^~ /images/ {
     # variant 1 
   }

作为变体 1,nginx 将看到该匹配并立即使用它,而无需进一步搜索更好的正则表达式匹配。

这篇文章解释得比官方文档

相关内容