Networking

在 docker 容器中的 nginx 中設置 2 個虛擬主機並通過主機名定址它們

  • May 19, 2018

我已經搜尋過了,但我不太確定我發現的問題是否涵蓋了我的問題。

我有一個虛擬機(ubuntu 16.04.04 LTS),它已經安裝了 docker 並且正在執行一個 nginx 網路伺服器(工作正常)。

不是我想設置第二個虛擬主機。為此,我有一個配置文件 szenario.conf,其中包含以下幾行:1. 主機2. 主機

docker-compose.yml 看起來像這樣:Docker compose yml

現在,每當我輸入虛擬機的 IP 時,我都必須輸入例如 192.168.56.103:8080,它只返回第一個網站(本例中為 speedo)。

鍵入 example.speedo 和 example.fakebook 被路由到網際網路並且不起作用。

如何通過主機名使兩個站點都可用,以便在我導出這台機器時,另一個使用者可以在他的環境中導入機器時通過鍵入名稱輕鬆訪問這些站點?

我必須做出哪些改變?

要在瀏覽器的地址欄中輸入主機名並讓瀏覽器連接到您的虛擬機,它必須將主機名解析為 IP 地址。為此,它首先查看一個文件/etc/hosts並檢查是否在其中定義了主機名。如果是,則使用文件中指定的 IP。如果不是,則執行正常 DNS 查找。

根據您的環境,您可能無法更改 DNS,所以讓我們首先關注etc/hosts(或者%SystemRoot%\system32\drivers\etc\hosts如果您的作業系統是 Windows)。這是您電腦的本地文件,因此您在其中所做的任何更改只會影響您自己的瀏覽器。

為了能夠在您的瀏覽器中打開“example.speedo”和“example.fakebook”並連接到您的 nginx,請將以下行附加到您的主機文件中:

192.168.56.103 example.speedo example.fakebook

它所做的只是告訴您的電腦,名稱“example.speedo”和“example.fakebook”應解析為“192.168.56.103”。

請注意,雖然這對您有用,但如果您將虛擬機提供給其他人,他們必須對其主機文件進行相同的修改。

另一種選擇是更改您的 DNS。由於這樣做的過程在很大程度上取決於使用的​​ DNS 伺服器,我不知道該怎麼做。您必須添加兩個新區域,speedo 和 facebook,並在那裡添加 DNS 條目。然後使用相同 DNS 伺服器的其他使用者(這可能意味著與您在同一個網路上)可以使用您的機器而無需編輯他們的主機文件。

但是,我不建議這樣做,因為在本地 DNS 伺服器中使用可能有一天會成為官方區域的名稱(facebook 註冊 TLD facebook)可能會在未來導致問題(在這種情況下,facebook 可能有一天停止為你工作)。

如果您使用您擁有的域或可能在本地使用的域(例如“本地”),您可以在此域下添加名稱而無需擔心。例如“speedo.local”和“facebook.local”或“speedo.your.name.here”和“facebook.your.name.here”。

為了不必在地址欄中指定埠,您應該在埠 80 而不是 8080 上使用 nginx。設置ports80:80in docker-compose.yml

引用自:https://serverfault.com/questions/912931