【问题标题】:Nginx location doesn't matchNginx 位置不匹配
【发布时间】:2016-03-10 19:24:18
【问题描述】:

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

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

【问题讨论】:

    标签: regex nginx proxypass


    【解决方案1】:

    删除尾部斜杠:

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

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

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

    更新:
    您的后端 (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来代替。

    【讨论】:

    • 我试过了,你能想象到的每一种情况我都试过了,你想看看我的所有配置吗?
    • 我解决了,创建了一个监听 80 端口的默认服务器并将 proxy_pass 传递给它,它正在工作。但是我不知道为什么,当443端口上的所有通信。没关系,它正在工作。
    猜你喜欢
    • 2011-07-11
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    相关资源
    最近更新 更多