如果容器正在监听端口 80,那么 Nginx 反向代理如何设法将流量路由到正确的 Docker 容器?

如果容器正在监听端口 80,那么 Nginx 反向代理如何设法将流量路由到正确的 Docker 容器?

根据网站,当设置容器网络时,每个容器默认监听端口 80,这可能会导致传入流量发生冲突。这可以通过使用 Nginx 反向代理(也监听端口 80)来解决,该代理会查找 VIRTUAL_HOST 变量并将流量路由到正确的容器。

但这是我不明白的。如果 Nginx 也在监听端口 80(就像所有其他容器一样),那么如何解决流量冲突问题?既然 Nginx 正在监听端口 80,那么冲突问题不应该仍然存在吗?Nginx 是否会自动捕获所有传入流量,而不管其他容器的端口号是多少?我觉得整个概念相当令人困惑。

答案1

如果 Nginx 也监听 80 端口(和所有其他容器一样),那么如何解决流量冲突问题?

也许我误读了这篇文章,但似乎“所有其他容器”都没有监听端口 80(强调添加):

默认情况下,Docker 服务都监听端口 80,这会导致传入流量冲突。当然,您可以更改监听端口,但没有人愿意输入 coolwebsite.com:34567 来访问他们最喜欢的网站。

相反,如果您可以使用 nginx 将到达 coolwebsite.com 的流量路由到监听 34567 端口的容器,并将到达 anothercoolwebsite.net 的流量路由到监听 45678 端口的第二个容器,结果会怎样?

在这种情况下,Nginx 似乎是唯一在端口 80 上监听的 Web 服务器。

Nginx 是否会自动捕获所有传入流量,而不管其他容器的端口号?

Nginx 将捕获端口 80 上的所有流量。也就是说,这http://coolwebsite.com实际上相当于http://coolwebsite.com:80大多数软件下的流量。然后,Nginx 将根据主机名在端口 80 和 Docker 容器所运行的任何端口之间中继流量。

相关内容