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

时间:2014-02-09 18:15:40

标签: nginx

我有一个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;
    ...
}

3 个答案:

答案 0 :(得分:51)

从技术上讲,添加URI应该可以正常工作,因为它是documented here并且它说它应该可以工作,所以

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

本来应该没问题,但是既然你说它不是我建议的另一种方法,那就是不要将/my/uri传递给localhost:5000/1,而是将/1/my/uri传递给localhost:5000 rewrite ^ /1$1

这就是我的重写所做的

/1

意思是重写整个网址,在其前面添加location @test{ rewrite ^ /1$1; proxy_pass http://localhost:5000; } 然后添加其余内容,整个网区变为

{{1}}

注意: @Fleshgrinder provided an answer解释为什么第一种方法不起作用。

答案 1 :(得分:49)

这里到底发生了什么?

nginx无法在proxy_pass指令中处理您想要的URI部分,因为您位于命名位置(因此出现错误消息)。这是因为nginx以模块化方式构建,并且各个模块在各个阶段读取每个配置块。所以请记住,在以下情况下,proxy_pass指令中不能包含URI:

  1. 正则表达式位置
  2. 命名位置
  3. if阻止
  4. 我们怎样解决这个问题?

    Mohammad AbuShady explained如何进行重写并将请求的URI传递给代理服务器。我只想澄清原因。

答案 2 :(得分:10)

尝试省略“/”(URI部分)并检查。

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