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 LTS | Ubuntu 22.04 LTS |
CPU | 1GHz 以上 | 2GHz 以上 |
記憶體 | 512MB | 2GB 以上 |
儲存空間 | 10GB 以上 | 20GB 以上 |
網路 | 需要網際網路連線 | 建議高速網路 |
下載與安裝 Ubuntu
您可以從官方網站下載 Ubuntu(https://ubuntu.com/download/server)。取得 ISO 檔案後,您可以選擇使用 VirtualBox 或 VMware 創建虛擬環境,或安裝至 專屬伺服器或 VPS。
安裝步驟:
- 製作安裝媒體
- 使用 USB 隨身碟(可使用 Rufus 等工具)
- 將 ISO 檔案掛載至虛擬機
- 依照安裝精靈進行設定
- 語言設定為「日文」(或根據需求選擇)
- 確認網路連線
- 設定使用者名稱與密碼
- 安裝 SSH 伺服器(可稍後設定)
- 完成作業系統設定後重新啟動
- 登入並開始初始設定
基本初始設定
安裝完成後,建議立即進行以下初始設定。
- 更新系統套件
sudo apt update && sudo apt upgrade -y
→ 這將更新安全性修補程式與軟體套件。
- 設定時區
sudo timedatectl set-timezone Asia/Taipei
→ 設定為台灣時區(CST)。
- 啟用防火牆(UFW)
sudo ufw enable
→ 啟用防火牆以防止未授權的存取。
- 設定 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.com
和 test.com
兩個獨立的網站。
虛擬主機的主要類型:
- 基於名稱的虛擬主機(Name-based Virtual Host)
- 使用相同的 IP 地址 來運行多個網站
- 最常見的虛擬主機配置方式
- 基於 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
此指令將會:
- 驗證網域擁有權
- 自動下載並安裝 SSL 憑證
- 自動設定 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. 安裝 Apache | Apache 安裝與基本操作 |
4. 設定虛擬主機 | 如何管理多個網站 |
5. 安裝 SSL | 設定 HTTPS |
6. 安全性強化 | SSH 設定、防火牆、伺服器保護 |
💡 透過本指南,您可以輕鬆建立安全且高效的 Ubuntu Web 伺服器!