根据这网站,当设置容器网络时,每个容器默认监听端口 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 容器所运行的任何端口之间中继流量。