根據這網站,當設定容器網路時,每個容器預設偵聽連接埠 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 容器運行的任何連接埠之間中繼流量,具體取決於主機名稱。