14. 在單台 Ubuntu 伺服器上託管多個網站:實用技巧

簡介

在單台 Ubuntu 伺服器上託管多個網站是開發者、小型企業和愛好者的經濟實惠之選。本指南將帶你逐步設定 虛擬主機 ,分別以 Apache 和 Nginx 為基礎,以便在同一台伺服器上託管多個網站。學完本教學,你將能夠設定伺服器以有效率地處理多個網域或子網域。


往期文章:

01. Ubuntu Server 入門 – SysOSX: AI & Cloud

02. 如何架設你的第一台 Ubuntu 伺服器:初學者指南 – SysOSX: AI & Cloud

03. 掌握 Ubuntu 伺服器的 Linux 命令列 – SysOSX: AI & Cloud

04. 管理 Ubuntu 伺服器上的使用者和權限:全面指南 – SysOSX: AI & Cloud

05. Ubuntu 伺服器網路基礎:全面指南 – SysOSX: AI & Cloud

06. 在 Ubuntu 伺服器上安裝和管理軟體:完整指南 – SysOSX: AI & Cloud

07.修補和更新 Ubuntu 伺服器:全面指南 – SysOSX: AI & Cloud

08. 保護你的 Ubuntu 伺服器:強化與防護的實用步驟 – SysOSX: AI & Cloud

09. Ubuntu 伺服器稽核與日誌記錄

10. Ubuntu 伺服器系統監控工具:全面指南 – SysOSX: AI & Cloud

11. Ubuntu 伺服器集中式日誌記錄:必讀指南 – SysOSX: AI & Cloud

12. Ubuntu 伺服器稽核與合規:最佳實務 – SysOSX: AI & Cloud

13. 為託管和 Web 應用程式架設 Ubuntu 伺服器:終極指南 – SysOSX: AI & Cloud



必要條件

要學習本指南,請確認你具備:

  • 一台 Ubuntu 伺服器(建議使用 20.04 或更高版本)。
  • 一個擁有 sudo 權限的使用者帳戶。
  • 多個指向你的伺服器 IP 位址的網域名稱。
  • Linux 命令的基礎知識。

第 1 部分:使用 Apache 託管多個網站


第 1 步:安裝 Apache Web 伺服器

如果尚未安裝 Apache,請執行下列命令:

sudo apt update && sudo apt install apache2 -y


第 2 步:為每個網站設定虛擬主機

Apache 使用虛擬主機從一台伺服器提供多個網站服務。每個網站都有自己的虛擬主機設定檔。

為網站建立目錄

  • 為每個網站建立單獨的目錄:
sudo mkdir -p /var/www/website1.com /var/www/website2.com
  • 將這些目錄的所有權指派給你的使用者帳戶:
sudo chown -R $USER:$USER /var/www/website1.com /var/www/website2.com

建立虛擬主機設定檔

  • 為第一個網站建立設定檔:
sudo nano /etc/apache2/sites-available/website1.com.conf
  • 新增下列設定:
<VirtualHost *:80>
    ServerName website1.com
    ServerAlias www.website1.com
    DocumentRoot /var/www/website1.com
    ErrorLog ${APACHE_LOG_DIR}/website1_error.log
    CustomLog ${APACHE_LOG_DIR}/website1_access.log combined
</VirtualHost>

  • 為第二個網站建立設定檔:
sudo nano /etc/apache2/sites-available/website2.com.conf
  • 新增下列設定:
<VirtualHost *:80>
    ServerName website2.com
    ServerAlias www.website2.com
    DocumentRoot /var/www/website2.com
    ErrorLog ${APACHE_LOG_DIR}/website2_error.log
    CustomLog ${APACHE_LOG_DIR}/website2_access.log combined
</VirtualHost>

啟用虛擬主機

  • 啟用虛擬主機設定:
sudo a2ensite website1.com.conf
sudo a2ensite website2.com.conf
  • 重新載入 Apache 以套用變更:
sudo systemctl reload apache2

第 3 步:測試 Apache 設定

  • 為每個網站建立一個簡單的 index.html 檔案:
echo "<h1>Welcome to Website 1</h1>" > /var/www/website1.com/index.html
echo "<h1>Welcome to Website 2</h1>" > /var/www/website2.com/index.html


  • 在瀏覽器中造訪 http://website1.com 和 http://website2.com 以驗證設定。

第 4 步:使用 SSL/TLS 保護網站

安裝 Certbot

安裝附帶 Apache 外掛程式的 Certbot:

sudo apt install certbot python3-certbot-apache -y

取得 SSL 憑證

為每個網站執行 Certbot:

sudo certbot --apache -d website1.com -d www.website1.com
sudo certbot --apache -d website2.com -d www.website2.com

Certbot 會自動為兩個網站設定 SSL,並將 HTTP 流量重新導向到 HTTPS。


第 2 部分:使用 Nginx 託管多個網站


第 1 步:安裝 Nginx Web 伺服器

如果尚未安裝 Nginx,請執行:

sudo apt update && sudo apt install nginx -y


第 2 步:為每個網站設定伺服器區塊

Nginx 使用伺服器區塊(類似於 Apache 中的虛擬主機)從一台伺服器提供多個網站服務。

為網站建立目錄

  • 為每個網站建立單獨的目錄:
sudo mkdir -p /var/www/website1.com /var/www/website2.com
  • 將這些目錄的所有權指派給你的使用者帳戶:
sudo chown -R $USER:$USER /var/www/website1.com /var/www/website2.com

建立伺服器區塊設定檔

  • 為第一個網站建立設定檔:
sudo nano /etc/nginx/sites-available/website1.com

  • 新增下列設定:
server {
    listen 80;
    server_name website1.com www.website1.com;

    root /var/www/website1.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    error_log /var/log/nginx/website1_error.log;
    access_log /var/log/nginx/website1_access.log;
}

  • 為第二個網站建立設定檔:
sudo nano /etc/nginx/sites-available/website2.com

  • 新增下列設定:
server {
    listen 80;
    server_name website2.com www.website2.com;

    root /var/www/website2.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    error_log /var/log/nginx/website2_error.log;
    access_log /var/log/nginx/website2_access.log;
}

啟用伺服器區塊

  • 建立符號連結以啟用伺服器區塊:
sudo ln -s /etc/nginx/sites-available/website1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/website2.com /etc/nginx/sites-enabled/

  • 測試 Nginx 設定:
sudo nginx -t
  • 重新載入 Nginx 以套用變更:
sudo systemctl reload nginx

第 3 步:測試 Nginx 設定

  • 為每個網站建立一個簡單的 index.html 檔案:
echo "<h1>Welcome to Website 1</h1>" > /var/www/website1.com/index.html
echo "<h1>Welcome to Website 2</h1>" > /var/www/website2.com/index.html

  • 在瀏覽器中造訪 http://website1.com 和 http://website2.com 以驗證設定。

第 4 步:使用 SSL/TLS 保護網站

安裝 Certbot

安裝附帶 Nginx 外掛程式的 Certbot:

sudo apt install certbot python3-certbot-nginx -y

取得 SSL 憑證

為每個網站執行 Certbot:

sudo certbot --nginx -d website1.com -d www.website1.com
sudo certbot --nginx -d website2.com -d www.website2.com

Certbot 會自動為兩個網站設定 SSL,並將 HTTP 流量重新導向到 HTTPS。


參考資料

結論

在單台 Ubuntu 伺服器上託管多個網站是管理 Web 應用程式或網域的實用且經濟的方式。無論你使用 Apache 還是 Nginx,該流程都包括設定目錄、設定虛擬主機或伺服器區塊,以及使用 Certbot 透過 SSL/TLS 憑證保護你的網站。按照本指南操作,你可以有效率地託管多個網域或子網域,並確保伺服器針對可擴充性和安全性進行了最佳化。

Apache 和 Nginx 都是強大的 Web 伺服器,兩者之間的選擇通常取決於你的具體需求。Apache 提供豐富的設定選項和相容性,而 Nginx 則在效能和處理並行連線方面表現出色。無論你選擇哪一個,本指南都能為你提供有效管理多個網站的基礎知識。


敬請期待下一個主題: 在 Ubuntu 伺服器上管理儲存體和磁碟 在這篇即將發布的指南中,你將學習如何設定磁碟初始化、為不同檔案系統建立分割區,以及擴充磁碟(包括掛載到檔案系統)。千萬別錯過!