nginx proxy_pass连接到变量时无法正常工作

时间:2020-09-11 22:13:11

标签: nginx

我有一个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的原因。

修改1

我又玩了一些,发现这个不起作用:

location /nzbget/api/ {
    set $upstream_nzbget http://nzbget:6789/;
    proxy_pass $upstream_nzbget;
}

这真的很奇怪。它是相同的字符串,唯一的区别是使用变量vs字符串文字。我在这里没有任何字符串连接。我不确定为什么会有行为上的差异。

编辑2

This SO question可能是同一问题,但没有有用的答案。

1 个答案:

答案 0 :(得分:0)

$request_uri与变量一起使用时,需要传递它。在docs中的某个地方。

会是这样的:

location /nzbget/api/ {
    set $upstream_nzbget http://nzbget:6789$request_uri;
    proxy_pass $upstream_nzbget;
}
相关问题