Ubuntu Web伺服器完整指南|Apache+SSL+最佳化【適合初學者】

目次

1. 前言

什麼是 Ubuntu Web 伺服器?

Web 伺服器是一種用於在互聯網上提供網站的系統。常見的 Web 伺服器軟體包括 Apache、Nginx、LiteSpeed 等,而在 Ubuntu 上最常見的是 Apache
Ubuntu 由於輕量、穩定性高且為開源軟體,被個人與企業廣泛採用。特別是 LAMP 環境(Linux, Apache, MySQL/MariaDB, PHP),可輕鬆建置,適用於多數網站與應用程式的運行。

適合閱讀本文章的對象

本文章適合第一次建立 Web 伺服器的初學者。我們將詳細介紹如何使用 Ubuntu 架設 Web 伺服器,安裝 Apache,設定虛擬主機與 SSL 憑證,並進行最佳化與安全性強化。

學習內容

  • 如何在 Ubuntu 上建立 Web 伺服器(Apache 的安裝與基本設定)
  • 虛擬主機的設定與多網站管理
  • 使用 Let’s Encrypt 免費安裝 SSL
  • 如何強化 Web 伺服器的安全性與最佳化
  • 常見問題與錯誤排除方法
年収訴求

2. 安裝 Ubuntu 並進行初始設定

系統需求

要將 Ubuntu 運行為 Web 伺服器,建議符合以下最低規格

項目最低需求建議需求
作業系統Ubuntu 22.04 LTSUbuntu 22.04 LTS
CPU1GHz 以上2GHz 以上
記憶體512MB2GB 以上
儲存空間10GB 以上20GB 以上
網路需要網際網路連線建議高速網路

下載與安裝 Ubuntu

您可以從官方網站下載 Ubuntu(https://ubuntu.com/download/server)。取得 ISO 檔案後,您可以選擇使用 VirtualBox 或 VMware 創建虛擬環境,或安裝至 專屬伺服器或 VPS

安裝步驟:

  1. 製作安裝媒體
  • 使用 USB 隨身碟(可使用 Rufus 等工具)
  • 將 ISO 檔案掛載至虛擬機
  1. 依照安裝精靈進行設定
  • 語言設定為「日文」(或根據需求選擇)
  • 確認網路連線
  • 設定使用者名稱與密碼
  • 安裝 SSH 伺服器(可稍後設定)
  1. 完成作業系統設定後重新啟動
  2. 登入並開始初始設定

基本初始設定

安裝完成後,建議立即進行以下初始設定。

  1. 更新系統套件
sudo apt update && sudo apt upgrade -y

→ 這將更新安全性修補程式與軟體套件。

  1. 設定時區
sudo timedatectl set-timezone Asia/Taipei

→ 設定為台灣時區(CST)。

  1. 啟用防火牆(UFW)
sudo ufw enable

→ 啟用防火牆以防止未授權的存取。

  1. 設定 SSH(遠端管理)
  • 確認 SSH 是否已啟用
    sudo systemctl status ssh
  • 若未啟用,則執行以下指令來啟動 SSH
    sudo systemctl enable --now ssh

完成這些初始設定後,您的 Ubuntu 伺服器已準備好進一步的 Web 伺服器配置。

3. 安裝與基本設定 Apache

什麼是 Apache?

Apache(正式名稱:Apache HTTP Server) 是一款開源的 Web 伺服器軟體,以穩定性、高擴展性與高安全性著稱,全球約 30% 以上的伺服器使用 Apache

主要特點:

  • 免費開源(適合個人與企業使用)
  • 模組化架構,可自由擴展功能
  • 支援 SSL/TLS,可配置 HTTPS
  • 虛擬主機(Virtual Host) 可同時管理多個網站

安裝 Apache

在 Ubuntu 上,可以使用 apt 套件管理器來安裝 Apache。

安裝 Apache

執行以下指令來安裝 Apache:

sudo apt update
sudo apt install apache2 -y

確認 Apache 是否安裝成功

安裝後,可以透過以下指令確認 Apache 版本:

apache2 -v

範例輸出:

Server version: Apache/2.4.52 (Ubuntu)
Server built:   2023-07-01T12:34:56

如果顯示類似的版本資訊,表示 Apache 已成功安裝。

啟動、停止與重新啟動 Apache

可以使用 systemctl 指令來管理 Apache 服務。

啟動 Apache

sudo systemctl start apache2

這樣 Apache 伺服器就已經啟動並可接受請求。

設定 Apache 於開機時自動啟動

sudo systemctl enable apache2

確認 Apache 目前的狀態

可以使用以下指令查看 Apache 是否正在執行:

sudo systemctl status apache2

如果 Apache 運行正常,應該會顯示如下資訊:

● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: active (running) since ...

重新啟動或停止 Apache

當修改設定後,可以透過以下指令重新啟動 Apache:

sudo systemctl restart apache2

如果需要暫時關閉 Apache,則可以使用以下指令:

sudo systemctl stop apache2

確認 Apache 是否正常運行

可以透過瀏覽器來測試 Apache 是否運行正常。

1. 檢查伺服器 IP 地址

hostname -I

或者使用以下指令獲取外部 IP:

curl ifconfig.me

2. 在瀏覽器中測試

在瀏覽器的網址列輸入:

http://<伺服器 IP 地址>/

或者如果是在本機測試,則輸入:

http://localhost/

如果 Apache 運行正常,應該會看到預設的 Apache 頁面:

Apache2 Ubuntu Default Page
It works!

4. 設定虛擬主機(管理多個網站)

什麼是虛擬主機(Virtual Host)?

虛擬主機是一種允許單一 Apache 伺服器管理多個網站 的技術。
例如,一台伺服器可以同時運行 example.comtest.com 兩個獨立的網站。

虛擬主機的主要類型:

  1. 基於名稱的虛擬主機(Name-based Virtual Host)
  • 使用相同的 IP 地址 來運行多個網站
  • 最常見的虛擬主機配置方式
  1. 基於 IP 的虛擬主機(IP-based Virtual Host)
  • 為不同網站分配不同的 IP 地址
  • 通常需要多個網路介面

一般來說,大部分環境都使用基於名稱的虛擬主機

設定虛擬主機的步驟

1. 創建網站的目錄

/var/www/ 目錄下為每個網站建立獨立的資料夾。

sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html

2. 設定目錄的擁有者

將網站資料夾的擁有者設為 www-data,以確保 Apache 可以讀取。

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chown -R www-data:www-data /var/www/test.com/public_html

3. 創建測試頁面

為每個網站創建一個簡單的首頁。

echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/public_html/index.html
echo "<h1>Welcome to test.com</h1>" | sudo tee /var/www/test.com/public_html/index.html

完成這些步驟後,接下來我們將配置虛擬主機的設定檔案。

4. 創建虛擬主機設定檔案

虛擬主機的設定檔案位於 /etc/apache2/sites-available/ 目錄內,每個網站應有獨立的設定檔案。

設定 example.com 的虛擬主機

使用以下指令創建設定檔案並進行編輯:

sudo nano /etc/apache2/sites-available/example.com.conf

填入以下內容:

<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html

    <Directory /var/www/example.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

設定 test.com 的虛擬主機

創建另一個設定檔案:

sudo nano /etc/apache2/sites-available/test.com.conf

填入以下內容:

<VirtualHost *:80>
    ServerAdmin admin@test.com
    ServerName test.com
    ServerAlias www.test.com
    DocumentRoot /var/www/test.com/public_html

    <Directory /var/www/test.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/test.com_error.log
    CustomLog ${APACHE_LOG_DIR}/test.com_access.log combined
</VirtualHost>

5. 啟用虛擬主機

使用 a2ensite 指令啟用虛擬主機設定:

sudo a2ensite example.com.conf
sudo a2ensite test.com.conf

測試 Apache 設定是否正確

執行以下指令檢查設定是否有錯誤:

sudo apachectl configtest

如果輸出 Syntax OK,表示設定無誤。

重新啟動 Apache 以套用變更

sudo systemctl restart apache2

6. 測試本機虛擬主機(編輯 hosts 檔案)

為了在本機測試,請編輯 /etc/hosts 檔案。

sudo nano /etc/hosts

新增以下內容:

127.0.0.1 example.com
127.0.0.1 test.com

存檔後,開啟瀏覽器並輸入 http://example.com/http://test.com/,應該可以看到對應的網頁。

5. 安裝 SSL/TLS(設定 HTTPS)

什麼是 SSL/TLS?

SSL(Secure Sockets Layer)與 TLS(Transport Layer Security)是用來加密網站與使用者之間的通訊的技術。

SSL/TLS 的好處

加密資料傳輸(防止數據被竊聽或篡改)
提升 Google SEO 排名(HTTPS 網站會獲得更好的搜尋排名)
避免瀏覽器警告(HTTP 網站可能會顯示「不安全」警告)
保護用戶帳戶與付款資訊

使用 Let’s Encrypt 免費取得 SSL 憑證

Let’s Encrypt 是提供免費 SSL 憑證的機構,可以透過 certbot 工具來自動安裝 SSL。

安裝 Certbot

sudo apt update
sudo apt install certbot python3-certbot-apache -y

自動安裝 SSL 憑證

執行以下指令來為網站設定 SSL:

sudo certbot --apache -d example.com -d www.example.com

此指令將會:

  1. 驗證網域擁有權
  2. 自動下載並安裝 SSL 憑證
  3. 自動設定 Apache 以使用 HTTPS

測試 HTTPS 是否啟用

在瀏覽器輸入:

https://example.com/

如果網址列顯示鎖頭 🔒,表示 SSL 設定成功。

手動設定 Apache 使用 SSL

1. 啟用 SSL 模組

sudo a2enmod ssl
sudo systemctl restart apache2

2. 設定 SSL 虛擬主機

sudo nano /etc/apache2/sites-available/example.com-le-ssl.conf

填入以下內容:

<VirtualHost *:443>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    <Directory /var/www/example.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

3. 啟用 SSL 設定並重新啟動 Apache

sudo a2ensite example.com-le-ssl.conf
sudo systemctl restart apache2

設定 SSL 憑證自動續期

Let’s Encrypt 的 SSL 憑證有效期限為 90 天,因此需要設定自動續期。

測試自動更新

sudo certbot renew --dry-run

如果測試成功,代表自動更新機制已生效。

6. 強化 Web 伺服器的安全性

設定防火牆(UFW)

Ubuntu 使用 UFW(Uncomplicated Firewall) 來管理防火牆規則。

允許 HTTP 與 HTTPS 流量

sudo ufw allow 'Apache Full'

啟用防火牆

sudo ufw enable

加強 SSH 安全性

預設的 SSH 設定容易受到暴力攻擊,因此需要進行加強。

修改 SSH 設定

sudo nano /etc/ssh/sshd_config

變更以下內容:

Port 2222  # 將 SSH 連接埠從 22 改為 2222(可自訂)
PermitRootLogin no  # 禁止 root 用戶直接登入
PasswordAuthentication no  # 關閉密碼登入,僅允許 SSH 金鑰登入

儲存後,重新啟動 SSH 服務:

sudo systemctl restart ssh

安裝 Fail2Ban 防止暴力破解

sudo apt install fail2ban -y

編輯設定檔:

sudo nano /etc/fail2ban/jail.local

新增以下內容:

[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 600

啟動 Fail2Ban:

sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

隱藏 Apache 版本資訊

為了防止攻擊者獲取伺服器資訊,可以隱藏 Apache 版本號。

編輯 Apache 安全性設定

sudo nano /etc/apache2/conf-available/security.conf

修改以下內容:

ServerTokens Prod
ServerSignature Off

儲存後,重新啟動 Apache:

sudo systemctl restart apache2

禁用不必要的 Apache 模組

sudo a2dismod autoindex
sudo a2dismod status
sudo systemctl restart apache2

7. Web 伺服器效能最佳化

調整 Apache 的 MPM 模組

MPM(Multi-Processing Module)決定 Apache 如何處理請求。

檢查當前 MPM 設定:

apachectl -M | grep mpm

如果顯示 mpm_prefork_module,建議改用 mpm_event

變更方式:

sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2

啟用 KeepAlive(持續連線)

sudo nano /etc/apache2/apache2.conf

確認以下設定:

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

儲存後重新啟動 Apache:

sudo systemctl restart apache2

啟用快取

啟用瀏覽器快取

sudo a2enmod expires
sudo systemctl restart apache2

/etc/apache2/sites-available/example.com.conf 中新增:

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 month"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
</IfModule>

啟用伺服器快取

sudo a2enmod cache cache_disk
sudo systemctl restart apache2

修改 Apache 設定:

<IfModule mod_cache.c>
    CacheEnable disk /
    CacheRoot /var/cache/apache2/mod_cache_disk
    CacheDefaultExpire 86400
</IfModule>

啟用 Gzip 壓縮

sudo a2enmod deflate
sudo systemctl restart apache2

/etc/apache2/sites-available/example.com.conf 中新增:

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/javascript
</IfModule>

8. 故障排除

Apache 無法啟動或當機

檢查 Apache 狀態:

sudo systemctl status apache2

檢查錯誤日誌:

sudo journalctl -xe
sudo tail -f /var/log/apache2/error.log

SSL 憑證問題

手動更新 SSL 憑證

sudo certbot renew --force-renewal

如果 SSL 無法啟動

sudo systemctl restart apache2

403、404、500 錯誤

403 Forbidden

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 755 /var/www/example.com/public_html

404 Not Found

sudo a2enmod rewrite
sudo systemctl restart apache2

500 Internal Server Error

sudo tail -f /var/log/apache2/error.log

9. 總結

本文章涵蓋的內容

章節內容
1. 前言介紹 Ubuntu Web 伺服器的基礎概念
2. 安裝與初始設定Ubuntu 安裝與基本配置
3. 安裝 ApacheApache 安裝與基本操作
4. 設定虛擬主機如何管理多個網站
5. 安裝 SSL設定 HTTPS
6. 安全性強化SSH 設定、防火牆、伺服器保護

💡 透過本指南,您可以輕鬆建立安全且高效的 Ubuntu Web 伺服器!

年収訴求