我有一个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;
...
}
答案 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:
if
阻止Mohammad AbuShady explained如何进行重写并将请求的URI传递给代理服务器。我只想澄清原因。
答案 2 :(得分:10)
尝试省略“/”(URI部分)并检查。
location @test{
proxy_pass http://localhost:5000;
}