適用於: .NET Core 2.1、.NET Core 3.1、.NET 5
本文討論如何使用主機名在 Nginx 中設定第二個網站,以及如何測試組態。
在此部分中,您應該已設定下列專案:
- Nginx 會自動執行,並接聽埠 80 上傳送的要求。
- Nginx 設定為反向 Proxy,並將所有傳入的 HTTP 要求路由傳送至在埠 5000 上接聽的第一個 ASP.NET Core 應用程式(您可以使用任何 ASP.NET Core 應用程式作為在此埠上執行的後端應用程式。
- 第一個 ASP.NET Core 應用程式設定為一律執行(如果進程停止或伺服器重新啟動,ASP.NET Core 應用程式應該會自動啟動。
- Linux 本機防火牆已啟用並設定為允許 SSH 和 HTTP 輸入流量。
- 第二個 ASP.NET Core 應用程式設定為接聽埠 5001(此應用程式也應該設定為一律執行,而且 BuggyAmb 範例 ASP.NET Core 應用程式應設定為安裝程式中的第二個應用程式。
目前,Nginx 中已設定一個網站。 任何抵達埠 80 到 Nginx 的要求,會路由傳送至該網站。 此設定中主機名並不重要。 使用IP位址或任何解析為IP位址的主機名。 所有要求都會路由傳送至默認網站。 該預設網站會作為反向 Proxy,並將要求路由傳送至接聽埠 5000 的第一個 ASP.NET Core 應用程式。
在本教學課程的這個部分中,您將在 Nginx 中建立第二個網站。 該網站也會做為反向 Proxy,且具有特定主機名的任何要求都會路由傳送至接聽埠 5001 的第二個 ASP.NET Core 應用程式。
您也會將網站設定為接聽特定主機名。 最後,會有兩個可存取且具有這些主機名的網站:
- 第一個網站:
http://myfirstwebsite
將流量導向至第一個 ASP.NET Core 示範應用程式。 - 第二個網站:
http://buggyamb
將流量導向第二個 ASP.NET 核心範例 Buggy 應用程式。
將和 buggyamb
新增myfirstwebsite
至用戶端 Windows 和 Linux 電腦的主機檔案。 如此一來,您就可以使用這些 URL 來測試新的組態。
這些主機名僅供示範之用。 只要您在本部分中的練習中一直使用相同的主機名,就可以隨意使用您偏好的任何其他主機名。
如果您記得,Nginx 載入月臺組態的其中一個目錄是 /etc/nginx/sites-enabled/。 目前有一個預設組態檔。 檔案類似下列螢幕快照。
注意
請注意醒目提示的部分,因為您必須修改下列專案:
server_name
:您可以在這裡設定所需的主機名。 目前,這會設定為 值_
。 這表示任何主機名。proxy_pass
:這是實際 ASP.NET 在指定URL上執行和接聽的核心應用程式。 要求會路由傳送至此 URL。
設定第一個網站以接聽主機標頭 http://myfirstwebsite
。 若要達成此目的,請在 /etc/nginx/sites-enabled/default 組態檔中變更 server_name
,如下列螢幕快照所示。 提醒您,您必須使用 sudo vi /etc/nginx/sites-enabled/default
命令來編輯此檔案。
為第二個網站建立第二個 Nginx 組態檔。 使用此檔案作為範本,在相同的組態目錄中建立此檔案的複本。 將檔案 命名為 buggyamb.config。
sudo cp /etc/nginx/sites-enabled/default /etc/nginx/sites-enabled/buggyamb.config
執行 命令來編輯組 sudo vi /etc/nginx/sites-enabled/buggyamb.config
態檔。 以下是 /etc/nginx/sites-enabled/buggyamb.config 檔案的最終版本。
產生的設定應該在 Nginx 月臺組態目錄中有兩個組態檔: buggyamb.config 和 預設值。 您必須將 Nginx 設定為重載設定變更。 不過,您應該先測試新的組態,以確保在進行變更時不會引入任何錯誤。 sudo nginx -t
執行 命令,並確認組態正確無誤。 然後,執行 sudo nginx -s reload
以重載組態,並在新的變更中讀取。
myfirstwebsite
設定 和 buggyamb
主機名,以解析為正確的IP位址。 當您從 Linux 計算機存取月臺時,這些主機名應該解析為 127.0.0.1 和外部用戶端,例如客戶端電腦。 主機名應該解析為 Linux 虛擬機的公用 IP 位址。 您可以從 Azure 入口網站 擷取該IP位址。
注意
主機對應會儲存在Linux中的 /etc/hosts 檔案,以及 Windows 中的 C:\WINDOWS\System32\drivers\etc\hosts 檔案中。
這是 Linux 主機檔案的內容。
您可以執行 curl myfirstwebsite
和 curl buggyamb
命令,對這兩個月臺的每個月臺提出要求。
以下是 curl myfirstwebsite
輸出。 回應似乎正確顯示來自最初部署且正在埠 5000 上接聽之示範 ASP.NET 核心應用程式首頁的 HTML 內容。
curl buggyamb
以下是輸出。 這會從在埠 5001 上執行的 BuggyAmb 範例應用程式的首頁顯示 HTML 內容。
您應該能夠使用瀏覽器,從用戶端電腦瀏覽相同的 URL。 如果您正確設定主機檔案,這也應該正常運作。 這是從 Windows 電腦上執行的瀏覽器瀏覽至 http://buggaymb
時所顯示的內容。
至此為止,您有下列設定:
裝載兩個網站的 Nginx:
- 第一個網站會使用
myfirstwebsite
主機標頭接聽要求,並將要求路由傳送至我們的示範 ASP.NET Core 應用程式。 此應用程式會接聽埠 5000。 - 第二個網站會使用 的主機標頭值
buggyamb
來接聽傳入的 HTTP 流量,並將要求路由傳送至第二個 ASP.NET Core 範例 Buggy 應用程式。 此應用程式會接聽埠 5001。
- 第一個網站會使用
ASP.NET Core 應用程式都會以重新啟動伺服器時自動重新啟動的服務執行,或應用程式停止回應。
Linux 本機防火牆已啟用並設定為允許 SSH 和 HTTP 流量。
當您瀏覽網站時,您可能會收到 HTTP 502 - 閘道錯誤 。 「HTTP 502 - 不正確的閘道」表示 Nginx 無法與後端 ASP.NET Core 應用程式通訊。 如果後端應用程式未執行,就會發生這種情況。
在此案例中:
- 請確定這兩個 ASP.NET Core 應用程式都會在不同的埠上接聽。 其中一個應該接聽埠 5000,另一個應該接聽埠 5001。
- 請確定這兩個 ASP.NET Core 應用程式都已設定為自動啟動。
- 檢查使用
systemctl status
命令之 ASP.NET Core 應用程式服務的狀態。 如果未執行,請執行 命令來檢查系統記錄檔,以journalctl
對其進行疑難解答。 使用syslogIdentifier
來篩選記錄。 - 請確定已安裝 .NET Core 3.1 和 .NET 5.0。 其中一個網站使用 .NET Core 3.1,另一個則使用 .NET 5.0。