【问题标题】:How do I map a location to an upstream server in Nginx?如何将位置映射到 Nginx 中的上游服务器?
【发布时间】:2019-01-06 23:24:39
【问题描述】:

我有几个 Docker 容器充当桥接网络上的 Web 服务器。我想使用 Nginx 作为代理,在桥接网络之外公开服务(Web),并使用服务器端包含嵌入来自其他服务(即 wiki)的内容。

长话短说,我正在尝试使用以下配置,但我的位置无法正常工作。 / 位置工作正常,但是当我添加另一个位置(例如 /wiki)或将 / 更改为更具体的位置(例如 /web)我从 Nginx 收到一条消息,分别说它“无法获取 /wiki”或“无法获取 /web”:

events { 
    worker_connections 1024; 
}

http {
    upstream wiki {
        server wiki:3000;
    }

    upstream web {
        server web:3000;
    }

    server {
        ssi on;

        location = /wiki {
            proxy_pass http://wiki;
        }

        location = / {
            proxy_pass http://web;
        }
    }    
}

我已附加到 Nginx 容器并验证我可以使用 CURL 访问其他容器 - 它们似乎工作正常。

我也阅读过 Nginx 的陷阱,知道使用主机名(wiki、web)并不理想,但我不提前知道 IP 地址,并试图通过告诉 docker 来解决任何 DNS 问题-说明 nginx 容器依赖 web 和 wiki。

有什么想法吗?

【问题讨论】:

  • 尝试在末尾添加反斜杠,例如http://wiki/;
  • 就是这样!您应该将此添加为答案(如果您能告诉我为什么会有所作为,则可以加分)。

标签: docker nginx ssi


【解决方案1】:

您必须将proxy_pass http://wiki; 转为proxy_pass http://wiki/;

据我所知,Nginx 会采用两种不同的方式,在 uri 末尾有/没有反斜杠。你可以在 nginx.org 上找到 more details about proxy_pass directive
在您的情况下,反斜杠 (/) 作为传递给服务器的 uri 是必不可少的。您已经收到错误消息“无法获取 /wiki”。其实这个错误信息的意思是server wiki:3000里面没有/wiki,不在Nginx范围内。
更好地了解带/不带 uri 的 proxy_pass 指令会对您有很大帮助。
我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-09
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2013-12-29
    相关资源
    最近更新 更多