Nginx位置不匹配

时间:2016-03-09 17:34:01

标签: regex nginx proxypass

我有这样的网址: 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/;
}

然后打开它正常工作的链接,但在这种情况下,它会代理所有请求。

1 个答案:

答案 0 :(得分:1)

删除尾部斜杠:

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

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

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

UPD:
您的后端(cdn-vagrant.something.com)配置为返回/cdn/ -> /的永久重定向。这意味着您的proxy_pass指令是正确的,您应该在后端将/cdn/个请求传递给/应该工作:

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

我唯一不确定的是www.vagrant.something.com配置中的if块。尝试不使用它们进行测试,因为if is evil。你应该避免像if (-f $request_filename)if (!-e $request_filename)这样的块,也许应该使用try_files