Apache 是目前世界上使用最廣泛的網頁伺服器。它是一款開源軟體,由 The Apache Software Foundation 維護。截至 2020 年 9 月,估計它為全球 36% 的網站流量提供服務。開發人員因其速度、安全性、可靠性和強健性而喜愛它。其易於自訂的特性使它能夠透過安裝擴充功能和模組來滿足許多環境的需求。
Apache 配備了一個比對系統,您可以使用該系統在單一 IP 位址上公開的單一 Apache 伺服器安裝中託管多個網域或網站。這些網域或網站是在定義為虛擬主機的 Apache 設定檔之一中設定的。
每個網域都有一個虛擬主機定義,並指向一個特定的目錄。當使用者造訪網域時,伺服器會檢查每個相符的虛擬主機,並根據他們輸入的主機名稱選擇使用哪一個來處理訪客的請求。如果找不到相符的主機名稱,伺服器會使用 conf 檔案中定義的第一個虛擬主機作為備用。訪客將存取他們請求的網頁,而不知道同一台伺服器正在為其他網站提供服務。根據您伺服器上的資源以及它能處理的流量,您可以託管任意數量的網域。
在本教學中,我們將引導您在 Ubuntu 20.04 伺服器上設定虛擬主機。
事前準備
為了進行本教學,您應該已安裝 Ubuntu 20.04。您還需要建立一個非 root 使用者並以此登入。
本教學中的步驟還要求您安裝 Apache。如果您尚未安裝,可以使用以下指令進行安裝。您可以參考我們的 LAMP Stack setup – Linux Apache MySQL PHP tutorial 以獲得更詳細的設定指南。
|
1 2 |
sudo apt update sudo apt install apache2 |
您應該已經從您選擇的網域註冊商註冊了免費或付費的網域名稱。請確保透過設定 DNS 記錄將網域指向您的伺服器。不過,您仍然可以使用我們的設定來完成本教學中的步驟。在本教學中,我們將使用 example.dev 和 mydomain.com。您可以自由地將它們替換為您自己的網域。如果您決定使用測試網域,則必須編輯 Apache 上的 hosts 檔案以處理這些網域。我們將在稍後的教學中介紹如何執行此操作。
步驟 1 – 設定網站目錄
這些是存放您網站訪客將存取的網站資料的目錄。可從網際網路存取的 Apache 文件根目錄通常位於 /var/www。我們將在此處為想要託管的各個網域建立目錄。在每個目錄中,我們將新增 public_html 目錄來存放實際的網站檔案。虛擬主機指向 public_html 目錄。這為您提供了靈活性,因為您可以將關鍵的網站檔案保留在 public_html 之外,而只將公開檔案放在其中。
接下來,輸入以下指令來建立目錄。請務必記住在後續設定中將測試網域替換為您的實際網域:
|
1 2 |
sudo mkdir -p /var/www/example.dev/public_html sudo mkdir -p /var/www/mydomain.com/public_html |
步驟 2 – 變更讀寫權限
先前的指令建立了目錄結構,但保留了 root 使用者的擁有權。我們希望我們的非 root 使用者對這些目錄擁有完整的讀寫權限。我們也希望一般網路使用者擁有讀取權限。
首先,輸入以下指令將擁有權變更為非 root 使用者:
|
1 2 |
sudo chown -R $USER:$USER /var/www/example.dev/public_html sudo chown -R $USER:$USER /var/www/mydomain.com/public_html |
$USER 是一個變數,用於獲取目前登入使用者的憑證。一般使用者現在擁有了 public_html 的所有權。接下來,您需要向一般網路授予讀取權限。以下命令允許對目錄中的所有檔案進行授權,以確保網頁正常提供服務:
|
1 |
sudo chmod -R 755 /var/www |
執行上述三個命令後,您的網站現在可以提供內容。此外,您的使用者也可以在特定目錄中建立要提供的內容。在這裡您可以找到更多資訊 關於 Ubuntu 權限.
步驟 3 – 在每個虛擬主機的目錄中建立示範網頁
目錄結構就緒後,是時候進行一些腳本編寫了。我們將使用 HTML 和 nano 文字編輯器來建立一些基本的網頁。輸入以下命令以開啟 nano 並在第一個網域的目錄中建立 index.html 檔案:
|
1 |
vim /var/www/example.dev/public_html/index.html |
在編輯器中,放入以下範例程式碼,當我們存取該網域時將會顯示:
|
1 2 3 4 5 6 7 8 |
<html> <head> <title>歡迎來到 Example.dev!</title> </head> <body> <h1>成功!! The example.dev 虛擬主機正在 運作!</h1> </body> </html> |
貼上上述內容後,按下 “!wq” 儲存並離開檔案。
輸入以下命令,使用 nano 編輯器為第二個網域建立 index.html 網頁:
|
1 |
vim /var/www/mydomain.com/public_html/index.html |
然後,在編輯器中貼上以下 HTML 程式碼,儲存並離開:
|
1 2 3 4 5 6 7 8 |
<html> <head> <title>歡迎來到 Mydomain.com!</title> </head> <body> <h1>成功!! The mydomain.com 虛擬主機正在 運作!</h1> </body> </html> |
現在,您已準備好用於測試我們將在下一步中建立的兩個虛擬主機的網頁。
步驟 4 – 為網域名稱建立虛擬主機檔案
虛擬主機檔案包含每個虛擬主機的設定。它們定義了網域名稱將如何提供服務。全新安裝的 Apache 附帶一個名為 000-default.conf 的預設虛擬主機檔案,我們可以使用它並將其調整為適用於我們的網域。如您所見,它以 .conf 副檔名結尾,這正是 Ubuntu 對設定檔的要求。
Apache 設定檔位於 /etc/apache2/sites-available 目錄中。我們將在該處儲存我們的虛擬主機檔案。我們可以複製預設的 conf 檔案並在必要時進行編輯。
-
為 example.dev 網域建立第一個虛擬主機檔案
輸入以下命令,透過複製預設 conf 檔案來建立 example.dev.conf:
|
1 |
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.dev.conf |
接下來,使用以下命令以 sudo 權限並透過 nano 編輯器開啟建立的檔案:
|
1 |
sudo nano /etc/apache2/sites-available/example.dev.conf |
預設的 conf 檔案如下圖所示。註解是用於引導您的。我們可以將其刪除,只留下包含實際設定行的乾淨檔案:

您需要根據您的網域名稱和儲存網站檔案的目錄路徑來自訂此檔案。此外,我們將更新並在檔案中新增幾個指令。它已經包含一個 ServerAdmin 指令,其中包含伺服器管理員接收電子郵件的電子郵件地址。它還包含一個 DocumentRoot 指令,指向您儲存網站檔案的目錄。
我們需要新增兩個新指令:ServerName 和 ServerAlias。ServerName 設定基礎網域名稱,也就是您放置網域的地方。ServerAlias 定義了 Apache 應該比對的其他名稱,就好像它們是基礎網域名稱一樣。它允許您比對像 www 這樣的網域。
更新檔案使其如下所示:
|
1 2 3 4 5 6 7 8 |
<VirtualHost *:80> ServerAdmin admin@example.dev ServerName example.dev ServerAlias www.example.dev DocumentRoot /var/www/example.dev/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> |
之後,適當地更新您的網域和電子郵件。完成後,按 CTRL + O 並按 ENTER 儲存檔案。要退出編輯器,請按 CTRL + X。
-
為 mydomain.com 網域建立第一個虛擬主機檔案
我們可以直接複製第一個網域的虛擬主機,並在需要時為第二個網域進行更新。使用以下命令複製檔案:
|
1 |
sudo cp /etc/apache2/sites-available/example.dev.conf /etc/apache2/sites-available/mydomain.com.conf |
然後,使用以下命令在 nano 編輯器中開啟它:
|
1 |
sudo nano /etc/apache2/sites-available/mydomain.com.conf |
尋找指令並進行適當的更新,使檔案如下所示:
|
1 2 3 4 5 6 7 8 |
<VirtualHost *:80> ServerAdmin admin@mydomain.com ServerName mydomain.com ServerAlias www.mydomain.com DocumentRoot /var/www/mydomain.com/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> |
完成後,儲存檔案並退出編輯器。
步驟 5 – 啟用虛擬主機檔案
在步驟四中,我們建立了虛擬主機檔案。然而,在您啟用它們之前,它們是無法運作的。Apache 有一個名為 a2ensite 的工具,我們將使用它來啟用虛擬主機。
輸入以下兩個命令以啟用虛擬主機:
|
1 2 |
sudo a2ensite example.dev.conf sudo a2ensite mydomain.com.conf |
上述命令的輸出如下所示:

接下來,您應該停用預設設定檔,我們使用 a2dissite 這個 Apache 工具來停用網站。輸入以下命令:
|
1 |
sudo a2dissite 000-default.conf |
從輸出中可以看出,您必須重新啟動 Apache 才能使設定生效。使用以下命令:
|
1 |
sudo systemctl restart apache2 |
然後,使用以下命令檢查 Apache 的狀態:
|
1 |
sudo systemctl status apache2 |
輸出結果顯示您的伺服器已啟動並正常運行,且能夠為這兩個網站提供服務。

步驟 6 – 使用範例網域修改本地 Hosts 檔案
如果您沒有註冊實際的網域,而是使用測試網域,則必須更新本地的 hosts 檔案。當您瀏覽虛擬主機檔案中設定的任何網域時,它們需要攔截流量並將其導向您的網站目錄。請記住,這僅在您的本地電腦上有效。如果您的本地電腦運行的是 Windows 作業系統,請按照此連結中的說明設定 hosts.
如果您使用的是 Mac 或 Linux 機器,hosts 檔案位於 /etc 目錄中。我們將使用 nano 編輯器來開啟並新增我們的測試網域。首先,輸入以下命令來尋找您的 VPS IP 位址:
|
1 |
curl -4 icanhazip.com |
輸入以下命令以開啟檔案並使用您的伺服器 IP 位址進行更新:
|
1 |
sudo nano /etc/hosts |
|
1 2 3 4 |
127.0.0.1 localhost 127.0.1.1 ComputerName your_server_IP example.dev your_server_IP mydomain.com |
然後,儲存並關閉檔案。每當您在瀏覽器中輸入網域名稱時,系統會首先檢查 hosts 檔案。如果找到該網域名稱,流量將被導向指定的 IP 位址。如果未找到,則會使用 DNS 系統進行全域重新導向。對於我們的測試網域,流量將被導向指定的 IP 位址。
步驟 7 – 測試您的虛擬主機
設定好網域名稱後,您可以在瀏覽器/終端機中檢查它們是否正常運作:
|
1 |
curl http://example.dev |
輸出結果應該類似這樣:

|
1 |
http://mydomain.com |

恭喜!您已成功設定在單一伺服器上運行兩個網站。
結論
在本指南中,您學習了如何設定 Apache 伺服器以提供多個網站的服務。如果您想新增更多網站,可以按照上述步驟並設定虛擬主機來進行。只要您的伺服器資源足夠,Apache 可以處理任意數量的網域。
祝您使用愉快!
留言
目前尚無留言。成為第一個留言的人吧。