如何将位置映射到 Nginx 中的上游服务器?

How do I map a location to an upstream server in Nginx?

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

长话短说,我正在尝试使用以下配置,但我的位置无法正常工作。 / 位置工作正常,但是当我添加另一个位置(例如 /wiki)或更改 /更具体的东西(例如 /web)我从 Nginx 收到一条消息,说它分别是 "Can't get /wiki" 或 "Can't get /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 地址,并试图通过告诉来解决任何 DNS 问题docker-构成nginx容器依赖web和wiki

有什么想法吗?

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

据我所知,Nginx 会在 uri 末尾采用两种不同的方式 with/without 反斜杠。您可能会在 nginx.org.
上找到 more details about proxy_pass directive 在您的情况下,反斜杠 (/) 作为要传递给服务器的 uri 是必不可少的。您已经收到错误消息 "Can't get /wiki"。其实这个报错的意思是server wiki:3000里面没有/wiki,Nginx作用域里没有
更好地了解 proxy_pass 指令 with/without uri 会对你有很大帮助。
我希望这会有所帮助。