nginx’proxy_pass’的位置不能有URI部分?

用户提问

nginx'proxy_pass'的位置不能有URI部分?

我有一个location块为

location @test{
    proxy_pass http://localhost:5000/1;
}

但是nginx抱怨说"proxy_pass cannot have URI part in location given by regular expression..."有人知道可能出了什么问题吗?

当上传完成时,我试图查询localhost:5000/1:

location /upload_attachment {
    upload_pass @test;
    upload_store /tmp;
    ...
}

2 个回答

用户回答

从技术上讲,只需添加URI就可以工作,因为它在这里有记载,它说它应该可以工作,所以

location @test{
    proxy_pass http://localhost:5000/1/; # with a trailing slash
}

应该工作正常,但既然你说没有,我建议周围的其他方式,诀窍是,而不是传递/my/urilocalhost:5000/1,我们通过/1/my/urilocalhost:5000

这就是我的重写所做的

rewrite ^ /1$1

意思是重写整个URL,/1然后添加剩下的部分,整个块变成

location @test{
    rewrite ^ /1$1;
    proxy_pass http://localhost:5000;
}
回答于 2018-03-02
用户回答

这里究竟发生了什么?

nginx无法在proxy_pass指令中处理所需的URI部分,因为位于指定的位置(因此是错误消息)。这是因为nginx是以模块化的方式构建的,每个配置块都是由各个模块在各个阶段读取的。所以请记住,proxy_pass在以下情况下,指令中不能有URI :

  1. 正则表达式位置
  2. 命名的地点
  3. if 块
回答于 2018-03-02

编辑注:参考第一个回答解决了问题


如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。