我有这样的网址:
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/;
}
然后打开它正常工作的链接,但在这种情况下,它会代理所有请求。
答案 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
。