用户提问
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; ... }
从技术上讲,只需添加URI就可以工作,因为它在这里有记载,它说它应该可以工作,所以
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
意思是重写整个URL,/1
然后添加剩下的部分,整个块变成
location @test{ rewrite ^ /1$1; proxy_pass http://localhost:5000; }
回答于 2018-03-02
这里究竟发生了什么?
nginx无法在proxy_pass
指令中处理所需的URI部分,因为位于指定的位置(因此是错误消息)。这是因为nginx是以模块化的方式构建的,每个配置块都是由各个模块在各个阶段读取的。所以请记住,proxy_pass
在以下情况下,指令中不能有URI :
- 正则表达式位置
- 命名的地点
if
块
回答于 2018-03-02
编辑注:参考第一个回答解决了问题
如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。