在 nginx 位置块中,“location /path”和“location ^~ /path”有什么区别?

在 nginx 位置块中,“location /path”和“location ^~ /path”有什么区别?

我有一个 WordPress 多站点网络,并且我正尝试将其一次一个站点地迁移到我的新服务器,因此我的 nginx 服务器上有一个反向代理,指向每个子站点的旧服务器。

当我做:

location /oldsite1 {
   proxy_pass http://myoldip;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
}
location /oldsite2 {
   proxy_pass http://myoldip;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
}

我可以通过 mydomain.com/oldsite1 和 mydomain.com/oldsite2 访问网站的前端,但是当我转到 mydomain.com/oldsite1/wp-admin 时,所有样式表和 JS 文件都返回 404。/oldsite2 也是如此。

当我做

location ^~ /oldsite1 {
   proxy_pass http://myoldip;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
}
location ^~ /oldsite2 {
   proxy_pass http://myoldip;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
}

一切似乎都运行正常,没有问题,但我不确定“^~”实际上是在做什么来修复它,或者是否有理由我不应该这样做。

文档指出:

如果最长匹配的前缀位置有“^~”修饰符,则不检查正则表达式。

我不确定这种行为与位置路径前没有修饰符有何不同以及原因。

相关内容