Cloudflare 免費啟用 SSL 憑證 HTTPS 與 CDN 服務

Cloudflare 免費啟用 SSL 憑證 HTTPS 與 CDN 服務 – 教學

前言

💡
用途:加速網站存取速度、提高安全性,並防止網路威脅,如 DDoS 攻擊,提升網站表現與穩定性。
 

在目前的網路環境中,網站安全性和存取速度已成為不可或缺的關鍵要素,SSL 憑證不僅能確保資料傳輸的安全性,更是建立使用者信任的基礎,而 CDN 服務則能大幅提升網站的存取速度和穩定性,Cloudflare 作為業界領先的網路服務供應商,提供了免費的 SSL 憑證和 CDN 服務,讓網站管理者無需投入大量資源,就能享有企業級的安全防護和效能優化方案。

本教學將介紹如何透過 Cloudflare 啟用 SSL 憑證,實現 HTTPS 安全連線,並善用其全球 CDN 網路,為您的網站打造安全且高效能的存取環境。

Cloudflare 官網

註冊專屬域名

請參閱下列教學說明:
🔗自建免費域名(US.KG)、託管和實做 Cloudflare DDNS – 教學
🔗Cloudflare 付費網域購買、託管和透過 API 實做 DDNS – 教學

託管到 Cloudflare

  1. 進入 Cloudflare 官網,點選右上角「登入」
    進入 Cloudflare 官網,點選右上角「登入」

  2. 點選左側的「網站」,輸入 US.KG 免費域名:bugtest.us.kg,點選「快速掃描 DNS 記錄」,再點選「繼續」
    點選左側的「網站」,輸入 US.KG 免費域名:bugtest.us.kg,點選「快速掃描 DNS 記錄」,再點選「繼續」

  3. 點選「免費」方案,再點選「繼續」
    點選「免費」方案,再點選「繼續」

  4. 點選「繼續以啟用」
    點選「繼續以啟用」

  5. 點選「確認」
    點選「確認」

  6. 複製下方的 Cloudflare 名稱伺服器(兩個),再點選下方的「繼續」
    junade.ns.cloudflare.com
    norah.ns.cloudflare.com
    複製下方的 Cloudflare 名稱伺服器(兩個),再點選下方的「繼續」

    複製下方的 Cloudflare 名稱伺服器(兩個),再點選下方的「繼續」-2

  7. 貼到網域供應商「Name Server」(名稱伺服器) 的設定欄位
    貼到網域供應商「Name Server」(名稱伺服器) 的設定欄位

Cloudflare 設定檢查

  1. 點選左側的「網站」,再點選右側的域名
    點選左側的「網站」,再點選右側的域名

  2. 上方域名的狀態顯示「使用中」,表示已經成功將您的域名託管到 Cloudflare
    上方域名的狀態顯示「使用中」,表示已經成功將您的域名託管到 Cloudflare

  3. 將右邊的功能下拉到底下,點選「從 Cloudflare 中移除」可以刪除已託管的域名
    將右邊的功能下拉到底下,點選「從 Cloudflare 中移除」可以刪除已託管的域名

  4. 點選「移除」會刪除已託管的域名
    點選「移除」會刪除已託管的域名

Cloudflare DNS 是否要開啟 Proxy 呢?

「Cloudflare DNS 設定」是否需要開啟 Proxy(雲端代理)取決於您的需求:

開啟 Proxy:

    1. 如果您希望 Cloudflare 給您提供 CDN、網站加速、SSL 和 DDoS 防護,則需要開啟 Proxy。
    2. 此時,Cloudflare 會代理您的網站,並管理 SSL 和安全性。
    3. Nginx 和 Cloudflare 之間的 HTTP/HTTPS 通訊會經過 Cloudflare 的 CDN 中轉。
    4. 如果您的網站使用了 Cloudflare 的憑證和 SSL 設定,開啟 Proxy 是必要的。

關閉 Proxy:

    1. 如果不開啟 Proxy,您將無法使用 Cloudflare 的 SSL、CDN 加速、DDoS 防護等服務。
    2. DNS 設定仍然會指向 Cloudflare,但 HTTP/HTTPS 將不會被 Cloudflare 管理,會直接對接 Nginx。

建議:

    1. 如果您使用了 Cloudflare 的「原點憑證」(Origin Certificate),並希望透過 Cloudflare 提供的 SSL 和安全服務,那麼 Proxy 應該開啟。
    2. 如果您希望簡單的 DNS 設定(不需要 Cloudflare CDN、SSL 加速等),可以關閉 Proxy。

Cloudflare DNS 設定

  1. 點選左側的「網站」,再點選右側的域名
    點選左側的「網站」,再點選右側的域名

  2. 點選左側的「DNS」
    點選左側的「DNS」

  3. 點選右側的「新增記錄」
    點選右側的「新增記錄」

  4. 使用瀏覽器開啟下列網址,查詢自己的「外部IP位址」
    我的IP位址查詢

    使用瀏覽器開啟下列網址,查詢自己的「外部IP位址」

  5. 類型:A﹑名稱:@﹑IPv4 位址:外部IP﹑Proxy 狀態:向右啟用,接著點選「儲存」
    類型:A﹑名稱:@﹑IPv4 位址:外部IP﹑Proxy 狀態:向右啟用,接著點選「儲存」

  6. 出現一筆自己域名的 A記錄:bugtest.us.kg
    出現一筆自己域名的 A記錄:bugtest.us.kg

  7. 再次點選右側的「新增記錄」
    再次點選右側的「新增記錄」

  8. 類型:A﹑名稱:www﹑IPv4 位址:外部IP﹑Proxy 狀態:向右啟用,接著點選「儲存」
    類型:A﹑名稱:www﹑IPv4 位址:外部IP﹑Proxy 狀態:向右啟用,接著點選「儲存」

  9. 出現一筆 A記錄:www
    出現一筆 A記錄:www

  10. 測試網頁 index.htm
    <html><body><h1>It works!</h1>
    <p>This is the default web page for this server.</p>
    <p>The web server software is running but no content has been added, yet.</p>
    </body></html>
    測試網頁 index.htm

  11. 測試您的伺服器,在瀏覽器輸入 http://您的域名
    測試您的伺服器,在瀏覽器輸入 http://您的域名

  12. 測試您的伺服器,在瀏覽器輸入 https://您的域名
    Cloudflare 預設已經啟用 SSL 憑證,可以透過 https 連線伺服器
    Cloudflare 預設已經啟用 SSL 憑證,可以透過 https 連線伺服器

  13. 點選左側的「SSL/TLS」,可以看到預設的加密模式「彈性」
    點選左側的「SSL/TLS」,可以看到預設的加密模式「彈性」

  14. 點選右方的「編輯」可以編輯 DNS 記錄
    點選右方的「編輯」可以編輯 DNS 記錄

  15. 修改 DNS 內容後,再點選右下角的「儲存」
    修改 DNS 內容後,再點選右下角的「儲存」

  16. 「勾選」一筆或多筆記錄後點選「刪除記錄」可以將 DNS 記錄刪除
    「勾選」一筆或多筆記錄後點選「刪除記錄」可以將 DNS 記錄刪除

  17. 輸入「刪除」後點選下方的「刪除」即可將 DNS 記錄刪除
    輸入「刪除」後點選下方的「刪除」即可將 DNS 記錄刪除

Cloudflare SSL 設定

DNS 記錄查詢
DNS 記錄查詢

  1. 查詢外部IP
    curl ipinfo.io/ip && echo
    

    查詢外部IP

  2. dig(Domain Information Groper)是一個用於查詢 DNS(域名系統)記錄的命令行工具,常用於診斷網路問題或檢查域名的 DNS 設定。

    dig <域名>
    

    dig

Cloudflare 預設的 SSL 模式:彈性 (Flexible)

Cloudflare 預設使用「彈性」(Flexible) 模式的 SSL 憑證,讓網站可以快速啟用 HTTPS,而無需對主機進行額外設定,以下是這種模式的運作方式和適用情況:

    1. 前半段加密:瀏覽器到 Cloudflare
      當用戶使用瀏覽器存取網站時,請求會先經過 Cloudflare 的「反向代理」(Reverse Proxy),在這個階段,Cloudflare 會自動加密傳輸,保障前半段的資料安全。

    2. 後半段未加密:Cloudflare 到主機
      在「彈性」(Flexible) 模式下,從 Cloudflare 到網站主機的傳輸是未加密的,這對某些情境來說是一種安全風險。

Cloudflare 預設的 SSL 模式:彈性 (Flexible)

適用情境與風險

  1. 適用於靜態網站
    如果網站是純靜態內容,且沒有敏感資料傳輸(例如會員登入或付款資訊),「彈性」(Flexible) SSL 模式已經足夠,能快速替網站啟用 HTTPS。

  2. 不適用於動態網站
    如果網站有會員系統或需要輸入密碼的登入頁面,使用「彈性」(Flexible) 模式會使敏感資料在未加密的後半段傳輸中暴露,存在極大的安全風險。

建議:使用「完整 (嚴格)」Full (strict) 模式

為了提升網站安全性,建議將 SSL 模式設定為「完整 (嚴格)Full (strict),確保:

  1. 從瀏覽器到 Cloudflare 的傳輸經過完整加密。
  2. 從 Cloudflare 到主機的傳輸同樣使用有效的 SSL 憑證進行加密。

建置步驟

  1. 點選左側的「網站」,再點選右側的域名
    點選左側的「網站」,再點選右側的域名

  2. 點選左側的「SSL/TLS」,接著點選下方的「原始伺服器」(Origin Server),再點選右側的「建立憑證」(Create Certificates)
    點選左側的「SSL/TLS」,接著點選下方的「原始伺服器」(Origin Server),再點選右側的「建立憑證」(Create Certificates)

  3. 金鑰類型(Private key type) 選擇使用 Cloudflare 產生私密金鑰和 CSR 私密金鑰類型 「RSA (2048)」,選項有 RSA (2048)、ECC
    主機名稱(Hostnames) 預設會帶入:您的域名*.您的域名
    憑證有效期限(Certificate Validity):預設是15年,選項有 7天、30天、90天、1年、2年、3年、15年
    完成後點選下方的「建立」(Create)
    金鑰類型(Private key type) 選擇使用 Cloudflare 產生私密金鑰

  4. 金鑰格式(Key Format) 選擇「PEM」,選項有 PEM、PKCS#7、DER
    複製「原點憑證」(Origin Certificate) 的內容後存檔成 server.pem
    複製「私密金鑰」(Private Key) 的內容後存檔成 server.key
    完成後點選下方的「好」(OK)
    金鑰格式(Key Format) 選擇「PEM」

  5. 建立憑證之後可以「下載」(Download) 或「撤銷」(Revoke) 憑證
    建立憑證之後可以「下載」(Download) 或「撤銷」(Revoke) 憑證

    下載憑證
    注意:這裡只有「原點憑證」,沒有「私密金鑰」,建議在上面的步驟就將「原點憑證」和「私密金鑰」的內容複製後進行存檔
    下載憑證

    撤銷憑證
    「勾選」我瞭解後點選右下角的「撤銷」就會刪除憑證
    撤銷憑證

  6. 將兩個憑證檔上傳到主機上
    「原點憑證」(Origin Certificate) :server.pem
    「私密金鑰」(Private Key) : server.key

    資料夾結構

    www/
    │
    ├── docker-compose.yml       # Docker Compose 設定檔
    │
    └── nginx/                   # Nginx 設定目錄
        ├── conf/                # Nginx 虛擬主機設定檔
        │   └── default.conf     # Nginx 設定檔
        │
        ├── html/                # 靜態資源目錄
        │   ├── index.html       # 預設靜態網頁
        │   └── assets/          # 其他資源 (CSS, JS, 圖片等)
        │
        ├── logs/                # Nginx 日誌目錄
        │   ├── access.log       # 存取日誌
        │   └── error.log        # 錯誤日誌
        │
        └── ssl/                 # SSL 憑證目錄
            ├── server.pem       # Cloudflare 原點憑證
            └── server.key       # Cloudflare 私密金鑰
    

    docker-compose.yml 範例

    services:
      nginx:
        image: nginx:alpine
        container_name: nginx
        ports:
          - "80:80"    # HTTP
          - "443:443"  # HTTPS
        volumes:
          - ./nginx/conf:/etc/nginx/conf.d       # Nginx 虛擬主機配置
          - ./nginx/html:/usr/share/nginx/html   # 靜態資源
          - ./nginx/logs:/var/log/nginx          # Nginx 日誌
          - ./nginx/ssl:/etc/nginx/ssl           # Cloudflare 憑證
        restart: always
    

    Nginx 設定檔:default.conf 範例

    # 主域名的 HTTP 設定
    server {
        listen 80;
        server_name bugtest.us.kg;
        return 301 https://$host$request_uri;  # 將 HTTP 請求導向到 HTTPS
    }
    
    # 主域名的 HTTPS 設定
    server {
        listen 443 ssl;
        server_name bugtest.us.kg;
    
        # Cloudflare SSL 憑證設定
        ssl_certificate /etc/nginx/ssl/server.pem;      # Cloudflare原點憑證
        ssl_certificate_key /etc/nginx/ssl/server.key;  # Cloudflare私密金鑰
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
    
        # 靜態資源設定
        location / {
            root /usr/share/nginx/html; # 指向靜態資源目錄
            index index.html index.htm;
            try_files $uri $uri/ =404;
        }
    
        # 防止存取敏感文件
        location ~ /\.(ht|git|svn|env) {
            deny all;
        }
    }
    
  7. 將 SSL 模式切換成「完整 (嚴格)」Full (strict)
    點選左側的「SSL/TLS」→「概觀」(Overview),再點選右側的「設定」(Configure)
    將 SSL 模式切換成「完整 (嚴格)」Full (strict)

  8. 點選「自訂 SSL/TLS」下方的「選取」
    點選「自訂 SSL/TLS」下方的「選取」

  9. 在「自訂 SSL/TLS」模式中點選「完整 (嚴格)」Full (strict),再點選下方的「儲存」
    在「自訂 SSL/TLS」模式中點選「完整 (嚴格)」Full (strict),再點選下方的「儲存」

  10. 設定完成,「SSL/TLS 加密」模式變成「完整 (嚴格)」Full (strict)
    設定完成,「SSL/TLS 加密」模式變成「完整 (嚴格)」Full (strict)

  11. 啟用「一律使用 HTTPS」(Always Use HTTPS) 功能
    點選左側的「SSL/TLS」→「邊緣憑證」(Edge Certificates),右方「一律使用 HTTPS」(Always Use HTTPS):向右啟用
    用途:將所有 HTTP 請求自動導向到 HTTPS,無需在伺服器設定中再額外處理導向。
    啟用「一律使用 HTTPS」(Always Use HTTPS) 功能

  12. 啟用「自動改寫 HTTPS」(Automatic HTTPS Rewrites) 功能
    點選左側的「SSL/TLS」→「邊緣憑證」(Edge Certificates),右方「自動改寫 HTTPS」(Automatic HTTPS Rewrites) :向右啟用
    用途:自動將網站中所有 HTTP 的資源連結(例如圖片、CSS、JS)重寫為 HTTPS,解決「混合內容」問題。
    啟用「自動改寫 HTTPS」(Automatic HTTPS Rewrites) 功能

  13. 如果可以正常瀏覽您的網站,代表「完整 (嚴格)」Full (strict) 模式已經成功啟用了
    測試您的伺服器,在瀏覽器輸入 https://您的域名
    Cloudflare 預設已經啟用 SSL 憑證,可以透過 https 連線伺服器
    如果可以正常瀏覽您的網站,代表「完整 (嚴格)」Full (strict) 模式已經成功啟用了

  14. 憑證有效期限:15年
    憑證有效期限:15年

Cloudflare CDN

💡 CDN(Content Delivery Network,內容傳遞網路)是一個分佈式的伺服器網路,用於快速、可靠地將網頁內容傳送給用戶。它透過多個地理位置分佈的節點來加速用戶存取網站或應用程式的速度,減少延遲並提高網站的穩定性和可用性。
 

CDN 的主要功能

  1. 加速內容傳遞
    1. 將網站的靜態資源(如圖片、CSS、JavaScript 和影片)緩存到全球的節點伺服器中,用戶請求會被自動導向到最近的伺服器,減少網路延遲。
  2. 減少伺服器負載
    1. CDN 會分擔原始伺服器的流量,降低單一伺服器的壓力,尤其在高流量時效果更明顯。
  3. 提升可靠性
    1. 如果某個節點出現故障,CDN 可以自動將流量切換到其他節點,確保網站的持續可用性。
  4. 增強安全性
    1. CDN 能夠提供額外的安全層,例如 DDoS 攻擊緩解、WAF(Web Application Firewall 網頁應用防火牆)等保護功能,幫助防範惡意流量。
  5. 全球內容傳遞
    1. CDN 將內容緩存於全球多個地點,讓來自不同國家或地區的用戶都能快速存取網站。

知名的 CDN 服務商

  1. Cloudflare:提供免費和高級的 CDN 服務,還有安全增強功能。
  2. AWS CloudFront:亞馬遜的 CDN 服務,適合使用 AWS 基礎架構的用戶。
  3. Akamai:高效能的企業級 CDN。
  4. Google Cloud CDN:Google 提供的全球分佈式網路。
  5. Fastly:專注於即時更新和快速內容分發。

網站測試

Cloudflare 會將網站的靜態內容複製並緩存在 CDN 節點伺服器上,當用戶存取網站時,請求會被路由到距離最近的 CDN 節點,避免因地理位置或網路擁堵導致的延遲。

  1. 網站外部IP
    網站外部IP

  2. Cloudflare 代理 IP
    Cloudflare 代理 IP

  3. Cloudflare 代理 IP
    Cloudflare 代理 IP-2

    使用 Firefox 瀏覽器打開自己的網站(http://bugtest.us.kg)和「網頁開發者工具」,可以看到網站背景圖(tree.jpg)的來源是「Cloudflare 代理 IP」,不是網站主機的「實際外部 IP」,代表「Cloudflare CDN」已經成功啟用了。

網站主機 DNS 設定

💡 範例 → 樹莓派 5B:8GB 型號、作業系統:Ubuntu Server 24.04.1 LTS 64Bit
 
  1. 在自己的網站主機上修改設定檔
    將 DNS 指向 Cloudflare 的 DNS 伺服器

    sudo vim /etc/netplan/50-cloud-init.yaml
    
  2. 增加 DNS 設定
    找到 nameservers,將 addresses 設定成 Cloudflare 的 DNS 伺服器

    1.  1.1.1.1  是 Cloudflare 的 DNS 主要伺服器
    2. 1.0.0.1 是 Cloudflare 的 DNS 備用伺服器
    network:
      ethernets:
        eth0:
          dhcp4: true
          dhcp6: false
          nameservers:
            addresses:
              - 1.1.1.1
              - 1.0.0.1
        version: 2
    

    增加 DNS 設定

  3. 套用網路設定
    sudo netplan apply
    
  4. DNS 伺服器修改設定
    # 備份舊設定檔
    sudo cp /etc/resolv.conf /etc/resolv.conf.bak
    
    # 使用軟連結替換,將 /etc/resolv.conf 指向 Systemd-resolved 完整的DNS設定檔
    sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
    
    # 驗證設定
    cat /etc/resolv.conf
    
    # 重啟網路服務
    sudo systemctl restart systemd-resolved
    

    DNS 伺服器修改設定

結語

透過本文的完整教學,可以為網站啟用 CloudflareSSL 憑證CDN 服務,在安全性方面,採用「完整(嚴格)SSL 模式確保了資料傳輸的端對端加密,而自動 HTTPS 重寫功能則解決了混合內容的問題。

在效能方面,Cloudflare 的全球 CDN 網路不僅加速了靜態資源的傳遞,更提供了 DDoS 防護等進階安全功能,這些免費且強大的應用,讓個人網站也能擁有企業級的安全防護效能優化,透過正確的設定,您的網站不僅會更安全,還能為全球各地的訪客提供更快速且穩定的瀏覽體驗。

閱讀完成

發佈留言

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

返回頂端