您是否有一台具有單個公共 IP 地址的伺服器,但需要託管多個域名或子域名?你會怎麼做?對於初學者來說,這種情況可能會讓人感到困惑。但不用擔心,本教程為您提供了解決方案,這樣您就可以在一台具有單個 IP 地址的伺服器上託管 NGINX 子域名和多個域名。
在本教程中,您將學習如何有效地在一台具有單個 IP 地址的伺服器上託管 NGINX 子域名或多個域名!
如果您準備好了,那就開始吧!
先決條件
本教程附有實際演示,但不需要太多先決條件,假設您已經安裝了一台啟用了 SSH 的 Ubuntu Server LTS 並安裝了 NGINX。本教程中的演示是在 Ubuntu Server LTS 20.04.1 上進行的。
設置 DNS 記錄
在您能夠託管 NGINX 子域名或多個域名之前,您需要在 DNS 控制面板中添加一個 A 記錄。A 記錄將所有域名和子域名綁定並指向單個 IP 地址,以便網頁瀏覽器可以找到您的網站。
1. 啟動您喜歡的網頁瀏覽器,並登入您的DNS控制面板。
2. 點擊新增記錄來開始新增A記錄。瀏覽器會將您重定向到一個頁面,在該頁面上您可以配置您的域名和子域名的DNS設定。

現在使用以下方式配置DNS設定:
在類型欄位中選擇A記錄。
在主機欄位中輸入@,並在值欄位中輸入您的伺服器IP。
在TTL欄位中選擇您想要的值,然後點擊確認按鈕保存設定。
對其他子域名重複相同的過程。

最終的DNS設定頁面如下所示:

您的DNS記錄控制面板的功能和設計可能會有所不同,但相同的原則適用於所有情況。
為NGINX域名和子域名設置網頁目錄
現在您已經為您的域名和子域名添加了A記錄,是時候設置它們的網頁目錄了。NGINX附帶了一個默認的虛擬主機文件,並配置為提供位於/usr/share/nginx/html的網頁目錄。
您將在NGINX的默認文檔根目錄(/var/www/html)中為每個域名創建一個單獨的網頁目錄。
1. 首先,打開您的終端並運行以下命令,為所有域名和子域名創建網絡目錄。這樣可以將每個網站的文件分開、組織和隔離。
2. 接下來,運行 chown
命令,以遞歸方式 (-R
) 將步驟一中創建的每個目錄的所有權更改為 www-data
用戶和組。您正在將每個目錄的所有權更改為 www-data
用戶和組,因為 NGINX 以 www-data 用戶運行。
3. 在您首選的代碼編輯器中創建一個名為 index.html 的文件,然後將下面的代碼復制/粘貼到 index.html 文件中。將文件保存在您的域的主要 Web 目錄 (/var/www/html/awstutorial.net) 中。
下面的 HTML 代碼在 Web 瀏覽器中打開 index.html 文件時顯示一條消息,該消息說“恭喜! awstutorial.net 網站正在運行!”。
4. 最後,在 /var/www/html/web1.awstutorial.net 和 /var/www/html/web2.awstutorial.net 目錄中創建相同的 index.html。但是,在每個 index.html 的代碼中將 awstutorial.net
替換為 web1.awstutorial.net
和 web2.awstutorial.net
。
設置 NGINX 域和子域的虛擬主機
您已經為您的域和子域準備了一個 index.html 頁面,可以通過 NGINX Web 服務器提供。下一步是為每個域創建一個 NGINX 虛擬主機配置文件,以提供 HTML 頁面。
1. 在您喜歡的程式編輯器中創建一個名為 awstutorial.net 的 NGINX 虛擬主機配置文件,然後將下面的代碼複製/粘貼到該文件中。將文件保存在 /etc/nginx/sites-available/ 目錄中。
下面的代碼控制了您的服務器的行為,例如當用戶嘗試訪問您的域時的服務器名稱和索引(首頁)頁面。
2. 接下來,運行以下 nginx
命令來檢查(-t
)NGINX 配置文件是否存在任何語法錯誤。
如果 NGINX 配置文件中未找到任何語法錯誤,您將獲得以下輸出。

3. 接下來,執行以下命令以創建一個符號連結(ln -s
),將/etc/nginx/sites-available連結到/etc/nginx/sites-enabled/目錄。此命令會啟用awstutorial.net虛擬主機配置文件。
在 NGINX Ubuntu 安裝中,sites-available 和 sites-enabled 格式是標準的,但其他發行版可能使用不同的標準。
4. 重複第一步至第三步,創建名為web1.awstutorial.net和web2.awstutorial.net的 NGINX 虛擬主機配置文件。
在每個 NGINX 虛擬主機配置文件中更改以下行:
- 將
root /var/www/html/awstutorial.net
一行替換為每個子域的 Web 根目錄(root /var/www/html/web1.awstutorial.net
和root /var/www/html/web2.awstutorial.net
)。 - 將
server_name awstutorial.net
一行替換為每個子域的名稱(server_name web1.awstutorial.net
和server_name web2.awstutorial.net
)。
5. 現在執行以下sudo ln
命令,就像在第三步中所做的那樣啟用虛擬主機配置文件。
6. 執行以下 systemctl
命令重新啟動 NGINX (restart nginx
) 服務以應用所有配置更改。
7. 最後,使用瀏覽器訪問域名和子域名的 URL 來測試網站是否運作正常。
如果域名和子域名正常加載,你會看到類似下面的消息。

在 NGINX 域名和子域名上設置 HTTPS
你已成功設置並測試了使用 HTTP 協議的 NGINX 域名和子域名,這很棒。但你必須通過啟用 HTTPS 來保護你的域名和子域名的連接。如何?通過從像 Let’s Encrypt SSL 這樣的證書授權機構獲得的證書。
1. 首先,運行以下命令安裝 Certbot 軟件包 (apt-get install certbot
)。Certbot 讓你為你的域名和子域名下載 SSL 證書。
2. 接下來,執行以下certbot
指令,以下載你的網域(-d awstutorial.net
)的SSL憑證(certonly
)。請注意,你需要同意服務條款(--agree-tos
)並提供你的電子郵件地址(--email
)。
將電子郵件替換為你自己的。
3. 輸入 ‘1’ 以選擇NGINX Web伺服器插件(nginx)來進行ACME CA驗證,如下所示。

在選擇NGINX Web伺服器插件後,你將看到下載SSL憑證的進度,涉及你的網域(awstutorial.net)。
預設情況下,Let’s Encrypt的SSL憑證存儲在/etc/letsencrypt/live/目錄中。

4. 現在,像在第二步中一樣,執行下面的每個指令,以下載其餘子網域(web1.awstutorial.net
和web2.awstutorial.net
)的SSL憑證。
5. 最後,執行以下ls
指令,列出/etc/letsencrypt/live/目錄中包含(*
)名稱中包含awstutorial.net
的所有SSL憑證。這樣可以驗證SSL憑證的存在。
下面,你將看到你的網域和子網域的SSL憑證。

此時,您已經擁有SSL證書。但是您如何使用它們來保護您的域名和子域名呢?您將在每個NGINX虛擬主機配置文件的 server
塊中定義證書的路徑。
1. 在您首選的代碼編輯器中打開位於/etc/nginx/sites-available/
目錄中的awstutorial.net NGINX虛擬主機配置文件。
2. 用下面的代碼替換文件的內容,在其中定義您域名的SSL證書路徑和SSL協議(在 SSL證書路徑
下)。
3. 重複執行相同的步驟(步驟一至步驟二)來處理剩餘的虛擬主機配置檔案(web1.awstutorial.net和web2.awstutorial.net)。但請務必將 SSL 憑證的路徑替換為您子域的憑證路徑(在SSL 憑證的路徑
下)。
4. 現在重新執行下面的systemctl
命令以重新啟動 NGINX 服務,以應用配置更改。
5. 最後,在網頁瀏覽器中導航至您的域和子域的 URL。但這次,請改用 HTTPS 協定來查看它們是否運作。
在下面,您可以看到位於地址欄的一把鎖的圖示,這表示該網站已使用您的 SSL 憑證進行安全保護。

結論
在本教程中,您已經學會了如何通過配置虛擬主機配置檔案來提供 NGINX 子域或多個域。您還涉及在虛擬主機配置檔案中定義的 SSL 憑證來保護您的域。
現在,為什麼不在生產環境中使用此設置,例如在單個伺服器上託管多個應用程序,並提供經濟實惠的網頁託管呢?