Nginx 位置不匹配

Nginx location doesn't match

我有一个 url 这样的: https://www.vagrant.something.com/cdn/util/thumb/100/100/dev-profile-images/444ba5eacba004cb31dabbb5d5cda3ce9b2c84f4.jpg 我有一个 nginx 配置,位置如下:

location /cdn/ {
  proxy_pass http://cdn-vagrant.something.com/;
}

我的问题是它应该执行 proxy_pass 来取回图像,但是位置与 URL 不匹配,这是什么问题?如果我使用这个:

location / {
  proxy_pass http://cdn-vagrant.something.com/;
}

并打开 link 它工作正常,但在这种情况下它 proxy_pass 所有请求。

删除结尾的斜线:

location /cdn/ {
  proxy_pass http://cdn-vagrant.something.com;
}

这样请求 uri 将按原样传递到后端。

proxy_pass 包含路径(即使是单个 /)时,该路径将替换代理请求中的位置路径(在您的情况下为 /cdn/)。

更新:
您的后端 (cdn-vagrant.something.com) 配置为 return 永久重定向 /cdn/ -> /。这意味着您的 proxy_pass 指令是正确的,您应该将 /cdn/ 请求传递给后端的 /应该有效:

location /cdn/ {
  proxy_pass http://cdn-vagrant.something.com/;
}

我唯一不确定的是您的 www.vagrant.something.com 配置中的那些 if 块。尝试在没有它们的情况下进行测试,因为 if is evil. And you should avoid blocks like if (-f $request_filename) and if (!-e $request_filename), maybe use try_files 相反。