【问题标题】:nginx proxy_pass doesn't work right when concatenating to variable连接到变量时,nginx proxy_pass 无法正常工作
【发布时间】:2020-09-14 03:49:23
【问题描述】:

我有一个 NGINX 服务器作为我托管的服务的反向代理运行。我试着用这个来配置它:

set $upstream_nzbget http://nzbget:6789;

location /nzbget/api/ {
    proxy_pass $upstream_nzbget/;
}

但是当我尝试将斜杠 / 添加到 $upstream_nzbget 的末尾时,proxy_pass 无法正常工作。如果我将其更改为此,它可以正常工作:

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;
}

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

编辑 2

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

【问题讨论】:

    标签: nginx


    【解决方案1】:

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

    会是这样的:

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

    【讨论】:

    • 但是$request_uri 会剥离/nzbget/api/ 部分吗?我希望转发该前缀之后的所有内容;不是完整的 URI。这就是为什么我只留下主机名作为变量;我希望 nginx 为我删除该前缀。
    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多