如何為初學者配置 HTTPS 和 SSL:Cloudflare、Let’s Encrypt 和 Apache 完整指南

更新日期: 2025 年 3 月 13 日

在網站安全中,HTTPS 和 SSL 是保護數據傳輸的重要基石。

對於初學者來說,配置這些技術可能顯得複雜,尤其是當你需要同時處理多個服務時。

本文將深入解說如何將 CloudflareLet’s EncryptApache 整合,實現網站的安全加密連接。

我們將逐步介紹這些工具的角色、設定方法以及常見問題的解決方案,幫助你輕鬆完成 HTTPS 配置。


架構總覽

在配置 HTTPS 和 SSL 之前,了解 Cloudflare、Let’s Encrypt 和 Apache 三者的角色以及它們如何協同工作,將大大有助於設置過程的順利進行。

以下將詳細介紹這三個服務的功能和作用:

Cloudflare (CDN + DNS + SSL)

Cloudflare 是一家提供 CDN (Content Delivery Network) 內容分發網絡、DNS (Domain Name System) 管理和網站安全服務的公司。它在 HTTPS 和 SSL 設置中扮演多重角色:

🌐 DNS 管理

  • 功能:Cloudflare 充當你的域名 (如 musicevent.realnewbie.com) 的 DNS 管理員,將訪客的域名請求解析到你的伺服器 IP 地址。
  • 作用:當用戶輸入你的網址時,Cloudflare 會負責快速、穩定地將該請求轉發到正確的伺服器,提供更好的網站響應速度和連接穩定性。

🔒 SSL 憑證與 HTTPS 支援

  • 免費 SSL/TLS 憑證:Cloudflare 可以自動為你的域名配置 SSL 憑證,讓網站可以通過 HTTPS 提供安全加密的連接。
  • HTTPS 加密保護:在使用 Cloudflare 的情況下,用戶與 Cloudflare 之間的連接始終是 HTTPS,這可以保護數據在傳輸過程中的安全性。

🚀 CDN (內容分發網絡) 加速

  • 內容緩存:Cloudflare 會將你的網站內容緩存到全球多個數據中心,當用戶訪問網站時,自動從最近的伺服器提供內容,減少延遲並提升加載速度。
  • DDoS 保護:Cloudflare 也提供防火牆和防止分散式阻斷服務攻擊 (DDoS) 的安全措施,提升網站安全性。

🔍 SSL 模式選擇

Cloudflare 提供多種 SSL 模式,允許你根據伺服器的 SSL 設置選擇適合的安全級別:

模式名稱描述安全性評級適用場景
Off完全關閉 SSL,所有流量以 HTTP 傳輸,數據不加密。🚫 不安全僅在內部測試或不涉及敏感數據時使用。
Flexible用戶到 Cloudflare 是 HTTPS,但 Cloudflare 到伺服器是 HTTP,僅部分加密。⚠️ 低安全伺服器無法配置 SSL 憑證時的臨時解決方案。
Full整個鏈路都是 HTTPS,但伺服器可以使用自簽名憑證,數據雙向加密。👍 中等安全伺服器有 SSL 憑證,但不保證絕對安全。
Full (Strict)與 Full 類似,但伺服器必須使用有效的受信任憑證 (如 Let’s Encrypt)。💯 高安全最推薦的模式,適合正式網站和需要高安全性時。

Let’s Encrypt (SSL 憑證提供者)

Let’s Encrypt 是一個免費、開源的 SSL 憑證提供者,隸屬於非營利組織 Internet Security Research Group (ISRG)。

它的宗旨是推動互聯網全面實現 HTTPS,加強網絡安全性。

🔑 SSL 憑證生成

  • 免費且自動化:通過簡單的命令 (certbot 工具),Let’s Encrypt 可以自動為你的域名生成 SSL 憑證,包括:
    • cert.pem:SSL 憑證本身。
    • privkey.pem:憑證的私鑰,用於加密數據傳輸。
    • fullchain.pem:完整的憑證鏈,適合 Web 伺服器配置使用。
  • 自動更新憑證:Let’s Encrypt 憑證有效期僅 90 天,但可以通過 certbot 自動更新,避免憑證過期導致 HTTPS 連接中斷。

🔒 HTTPS 支援

  • 在伺服器 (如 Apache) 上使用 Let’s Encrypt 憑證,可以確保伺服器與客戶端 (或 Cloudflare) 之間的連接始終是安全加密的 HTTPS 形式,保護數據免於中間人攻擊 (MITM) 風險。

Apache (Web 伺服器 + 反向代理)

Apache 是一個流行的開源 Web 伺服器軟體,擅長處理靜態和動態網站內容,並支持豐富的模組 (如 SSL、Proxy 等) 來擴展功能。

🔗 反向代理 (Reverse Proxy)

  • 功能:Apache 作為反向代理,將來自 Cloudflare 的外部請求轉發到內部應用 (如 Django),內部應用通常運行在非標準端口 (例如 8000 端口)。
  • ProxyPass 設定:通過 ProxyPassProxyPassReverse 指令,Apache 可以將外部的 HTTPS 請求無縫轉發到內部的 HTTP 服務,達到內外兼顧的效果。

🔒 SSL 啟用與配置

  • 啟用 SSL 模組:在 Apache 中,啟用 ssl 模組 (a2enmod ssl) 後,可以讓伺服器支持 HTTPS 連接。
  • 配置憑證:將 Let’s Encrypt 生成的 fullchain.pemprivkey.pem 憑證配置到 Apache 中,確保數據加密和身份驗證。
  • 443 端口:HTTPS 標準端口是 443,Apache 需要在此端口上監聽請求,提供安全的網頁服務。

流量處理流程

  1. 用戶訪問網站 (https://musicevent.realnewbie.com)。
  2. Cloudflare 解析 DNS,並將請求轉發至你的伺服器 IP。
  3. Apache 接收請求,確認 SSL 憑證有效性。
  4. 反向代理請求 至 Django 應用 (如 localhost:8000)。
  5. Django 返回數據,經由 Apache 和 Cloudflare 再回傳給用戶,整個過程保持 HTTPS 加密。
sequenceDiagram
    participant User as 使用者
    participant CF as Cloudflare
    participant Apache as Apache Web伺服器
    participant App as 應用伺服器
    participant LE as Let's Encrypt
    
    Note over LE,Apache: 前置步驟:SSL憑證發放
    LE->>Apache: 提供SSL憑證(90天更新一次)
    
    Note over User,App: 實際請求流程開始
    User->>CF: 發送HTTPS請求
    CF->>CF: 檢查請求與安全防護
    
    alt 靜態內容已在Cloudflare緩存
        CF->>User: 直接返回緩存內容
    else 動態內容或未緩存內容
        CF->>Apache: 轉發請求至Web伺服器
        
        alt 靜態資源請求(圖片/CSS/JS等)
            Apache->>Apache: 處理靜態資源請求
            Apache->>CF: 返回靜態資源
        else 動態內容請求
            Apache->>App: 轉發動態請求至應用伺服器
            App->>App: 執行應用邏輯(與資料庫互動等)
            App->>Apache: 返回處理結果
            Apache->>CF: 傳送完整響應
        end
        
        CF->>CF: 緩存適合的內容
        CF->>User: 返回請求結果
    end

在 Cloudflare 設置 SSL 模式

在 Cloudflare 中選擇正確的 SSL 模式是確保 HTTPS 正常運作的關鍵。以下是步驟和建議設定:

步驟

  1. 登錄到 Cloudflare 儀表板
  2. 選擇你的域名 (musicevent.realnewbie.com)。
  3. 進入 SSL/TLS 設置頁面。
  4. 選擇合適的 SSL 模式:
模式說明推薦度
Off完全不使用 SSL(極度不安全,不建議)。🚫 不推薦
Flexible瀏覽器到 Cloudflare 是 HTTPS,但 Cloudflare 到伺服器是 HTTP(有安全風險)。🚫 不推薦
Full雙向 HTTPS,伺服器可用自簽名或 Let’s Encrypt 憑證(基本安全)。👍 推薦
Full (Strict)雙向 HTTPS,但伺服器必須有有效的憑證(最安全)。💯 強烈推薦

建議設定:Full (Strict)

此模式要求你的 Apache 伺服器配置有效的 Let’s Encrypt 憑證,提供更高的安全性。


在 Apache 中配置 SSL

Apache 需要正確配置 SSL 以確保與 Cloudflare 的安全連接。

配置 Apache SSL 設定檔

<VirtualHost *:443>
    ServerName musicevent.realnewbie.com
    DocumentRoot /path/to/your/django/project

    # 啟用 SSL
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/musicevent.realnewbie.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/musicevent.realnewbie.com/privkey.pem

    # 反向代理到 Django 服務
    ProxyPass / http://localhost:8000/
    ProxyPassReverse / http://localhost:8000/

    <Directory /path/to/your/django/project>
        Require all granted
        AllowOverride All
    </Directory>
</VirtualHost>

啟用 Apache 必要模組:

sudo a2enmod ssl
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo systemctl reload apache2

🔄 啟用 SSL 站點配置:

sudo a2ensite musicevent-ssl.conf
sudo systemctl reload apache2

確認 Let’s Encrypt 憑證是否有效

手動檢查憑證有效性

sudo certbot renew --dry-run

如果成功,應該看到如下訊息:

Congratulations, all renewals succeeded.

💡 自動更新建議

Let’s Encrypt 憑證有效期僅 90 天,建議設置自動更新,避免憑證過期。


防火牆與伺服器狀態檢查

🔍 確認 443 端口是否開放:

sudo lsof -i -P -n | grep LISTEN

你應該看到 Apache (apache2) 正在監聽 443 端口。

🛠️ 查看 Apache 日誌是否有錯誤:

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

測試 HTTPS 連接是否成功

🔍 使用命令行測試:

curl -I https://musicevent.realnewbie.com/

返回應該是 HTTP/1.1 200 OK

🌐 瀏覽器測試:

  • 地址欄應顯示安全鎖頭圖示。
  • 如果有錯誤,點擊安全警告查看詳細信息(例如:憑證無效、SSL 配置錯誤)。

補充建議

📎 Cloudflare 快取清理

如果修改了 SSL 配置,請在 Cloudflare 儀表板 中進行快取清理:
路徑:Caching > Configuration > Purge Everything

🔄 避免重複重定向問題

如果瀏覽器報錯 “Too many redirects”,檢查 Apache 中是否有 HTTP 到 HTTPS 的無限重定向。


結語

配置 HTTPS 和 SSL 並不需要太多高深的技術,但需要細心和正確的步驟操作。

通過本文的指引,你應該能順利將 CloudflareLet’s EncryptApache 結合使用,實現安全且高效的網站運行。

如果你在操作中遇到問題,歡迎隨時詢問,讓我們一起解決你的技術難題!

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *