使用 nginx 代理(带有 docker 容器)时是否需要指定 VIRTUAL_HOST?

使用 nginx 代理(带有 docker 容器)时是否需要指定 VIRTUAL_HOST?

我查看了很多关于 docker 容器、微服务和 nginx 代理的教程。真正引起我注意的一件事是,在 docker-compose.yml 文件中,我想要启动的服务有一个 VIRTUAL_HOST 环境变量。这样我就可以通过直接引用 VIRTUAL_HOST 来启动容器。

但是所有容器都需要指定 VIRTUAL_HOST 吗?例如,假设我有 3 个容器:A、B 和 C。如果我希望所有这 3 个容器都被代理,那么我是否必须在 docker-compose 文件中为所有 3 个容器指定 VIRTUAL_HOST 环境变量?VIRTUAL_HOST 环境变量是否是 Nginx 代理与这些容器正常工作的先决条件?我查看的所有教程都没有回答这个问题。

答案1

我想你说的是jwilder/nginx-proxy图像。

这样我就可以通过直接引用VIRTUAL_HOST来启动容器。

只要您键入,容器就会启动docker-compose up并且一直在运行。VIRTUAL_HOST告诉反向代理应该将哪些主机请求转发到这个容器。

例如,如果您有一个带有 的容器VIRTUAL_HOST=foo.example.com,那么对 revproxy 发出的每个请求foo.example.comHost将转发到此容器,并且其响应将由代理发送到客户端。但如果标Host头为bar.example.com,则请求将不会转发到该容器。相反,代理会将其转发到带有 的容器VIRTUAL_HOST=bar.example.com。如果不存在这样的容器,它将尝试使用代理容器(而不是默认容器)上带有变量指定的默认主机DEFAULT_HOST。如果未配置默认主机,它将返回错误。

如果没有VIRTUAL_HOST,代理将不知道Host该容器对应哪个,因此不会转发任何请求。

答案2

是的。

如果您有三个独立的服务,它们执行不同的任务并希望独立路由 - 为每个服务指定一个唯一的虚拟主机。随后将使用该虚拟主机向该容器发出请求(具有该虚拟主机环境变量的容器将响应)

如果你有相同服务的三个实例 - 那么为每个实例提供相同的虚拟主机环境变量,nginx 将轮询请求

相关内容