我有一个NGINX服务器作为我托管的服务的反向代理运行。我尝试用此配置它:
set $upstream_nzbget http://nzbget:6789;
location /nzbget/api/ {
proxy_pass $upstream_nzbget/;
}
但是,当我尝试将斜杠proxy_pass
添加到/
的末尾时,$upstream_nzbget
无法正常工作。如果我将其更改为此,它将正常工作:
location /nzbget/api/ {
proxy_pass http://nzbget:6789/;
}
因此,我认为这与proxy_pass
中的变量有关。在第一种情况(不起作用的情况)中,我不确定URL到底是什么。我还没有找到记录proxy_pass
使用的最终URI的方法。
有人可以解释为什么第一种情况不起作用吗?什么是正确的解决方案?请注意,我需要将变量保留在proxy_pass
中,以便它使用解析器。
旁注:我在位置块中使用斜杠,因为否则使用该URL时会得到404:
domain.com/nzbget/api/api:password/xmlrpc
这就是为什么我使用/nzbget/api/
而不是/nzbget/api
的原因。
我又玩了一些,发现这个也不起作用:
location /nzbget/api/ {
set $upstream_nzbget http://nzbget:6789/;
proxy_pass $upstream_nzbget;
}
这真的很奇怪。它是相同的字符串,唯一的区别是使用变量vs字符串文字。我在这里没有任何字符串连接。我不确定为什么会有行为上的差异。
This SO question可能是同一问题,但没有有用的答案。
答案 0 :(得分:0)
将$request_uri
与变量一起使用时,需要传递它。在docs中的某个地方。
会是这样的:
location /nzbget/api/ {
set $upstream_nzbget http://nzbget:6789$request_uri;
proxy_pass $upstream_nzbget;
}