跳至主要內容

自架 DDNS 實戰 Ep.2:GCP Nginx 反向代理 + 免費 SSL 憑證

作者:Clone發布日期:修改日期:分類:Google Cloud Platform (GCP)閱讀時間:約 10 分鐘

GCP Nginx 反向代理與免費 SSL 憑證設定教學封面,展示資安防護盾牌與綠色鎖頭
目錄
  1. ⚡ Ep.2 技術速查:GCP Nginx 反向代理與 SSL 關鍵指令
  2. 步驟一:設定 Systemd 自動啟動 (讓服務永不掉線)
  3. 1. 建立服務設定檔
  4. 2. 填入設定內容
  5. 3. 啟用服務
  6. 步驟二:安裝 Nginx 反向代理
  7. 1. 安裝 Nginx
  8. 2. 設定 Nginx 轉發規則
  9. 3. 啟用設定
  10. 步驟三:申請 SSL 憑證 (掛上綠色鎖頭)
  11. 1. 安裝 Certbot
  12. 2. 自動申請憑證
  13. 步驟四:最終驗證與安全性測試
  14. 1. 開啟瀏覽器測試
  15. 2. 測試即時日誌 (v2.0 獨家功能)
  16. 結語與下集預告
  17. 💡 Nginx 與 SSL 常見問題
  18. Q1:為什麼需要 Nginx 反向代理?直接用 Python 不行嗎?
  19. Q2:Let’s Encrypt 免費 SSL 憑證安全嗎?
  20. Q3:如果 Certbot 自動續期失敗怎麼辦?

⚡ Ep.2 技術速查:GCP Nginx 反向代理與 SSL 關鍵指令

老手專用區:如果您已經完成 Ep.1 環境建置,只需複製以下關鍵指令,即可快速部署 Nginx 反向代理 與 免費 SSL 憑證。

# 1. 安裝 Nginx 與 Certbot 核心套件 sudo apt update && sudo apt install nginx certbot python3-certbot-nginx -y

# 2. 申請 Let’s Encrypt SSL (自動修改 Nginx 設定) sudo certbot —nginx -d your-domain.com

# 3. 測試 SSL 自動續期機制 sudo certbot renew —dry-run

👇 詳細 Systemd 與 Nginx 設定檔解說請往下閱讀 👇

歡迎回到 自架 DDNS 系列教學!在 [Ep.1 環境架設篇] 中,我們成功在 GCP 永久免費 主機上部署了 Python 核心程式,並完成了 Argon2 密碼雜湊與 AES 設定檔加密。

但目前的系統還有兩個致命傷:

  1. 手動運作:如果您關閉 SSH 視窗或主機重開機,服務就會停止,導致 DDNS 解析失效。
  2. 連線不安全:目前使用的是 http:// 明文傳輸。這意味著當您在公共 Wi-Fi 登入管理後台時,您的密碼可能會被駭客透過封包嗅探攔截。

這不是我們要的「企業級」系統!

本篇教學 (Ep.2) 將帶您完成最後一哩路:設定 Systemd 自動啟動,並配置 Nginx 反向代理 與 Let’s Encrypt 免費 SSL,讓您的中控台擁有綠色安全鎖頭 (HTTPS)。

步驟一:設定 Systemd 自動啟動 (讓服務永不掉線)

Systemd 是 Linux 系統的服務管理器,透過建立 .service 設定檔,可確保 DDNS 自架 程式在 GCP 主機重啟後自動執行,並在崩潰時自動重啟,實現 99.9% 的服務高可用性。

我們要將 Python 程式註冊為 Linux 的系統服務,這樣即使 GCP 主機因維護而重啟,DDNS 中控台也會自動復活。

1. 建立服務設定檔

我們已為您準備好標準範本。請使用編輯器建立服務檔案:

Bash
sudo nano /etc/systemd/system/ddns.service

2. 填入設定內容

請複製以下內容,並將 YOUR_USERNAME 修改為您的實際使用者名稱 (GCP 預設通常是您的 Google ID):

Bash
[Unit]
Description=Clone SecureDDNS Server v2.0
After=network.target

[Service]
Type=simple
# ⚠️ 請將 YOUR_USERNAME 替換為您的 Linux 使用者名稱
User=YOUR_USERNAME
WorkingDirectory=/home/YOUR_USERNAME/ddns-server
ExecStart=/home/YOUR_USERNAME/ddns-server/venv/bin/python ddns_management_server.py
Restart=always
RestartSec=10

# 安全性強化 (禁止修改系統核心與讀取其他目錄)
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=read-only
ReadWritePaths=/home/YOUR_USERNAME/ddns-server

[Install]
WantedBy=multi-user.target

Linux Systemd 服務設定檔範例,展示如何設定 DDNS 程式開機自動啟動 設定 Systemd 服務檔,實現 DDNS 伺服器開機自動執行與崩潰重啟。

編輯完成後,按 Ctrl+X,輸入 Y,然後按 Enter 存檔。

3. 啟用服務

執行以下指令,讓服務生效並立即啟動:

Bash
# 重新載入設定
sudo systemctl daemon-reload

# 設定開機自動啟動
sudo systemctl enable ddns.service

# 立即啟動服務
sudo systemctl start ddns.service

# 檢查狀態 (應顯示 Active: active (running))
sudo systemctl status ddns.service

步驟二:安裝 Nginx 反向代理

GCP Nginx 反向代理 能作為 DDNS 伺服器的安全屏障,隱藏後端 Python 應用程式的真實端口,並統一管理 SSL 憑證 加密與流量負載,大幅提升網站的安全性與連線效能。

為了讓 免費 DDNS 自架 系統更安全且效能更好,我們不讓 Python 直接面對外網,而是透過高效能的 Web 伺服器 Nginx 來轉發流量。

1. 安裝 Nginx

Bash
sudo apt install -y nginx

2. 設定 Nginx 轉發規則

Bash
server {
    listen 80;
    # ⚠️ 請修改為您的網域,例如: ddns.example.com
    server_name ddns.您的網域.com;

    # 一般請求轉發
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 即時日誌串流 (Server-Sent Events) 支援
    location /logs {
        proxy_pass http://127.0.0.1:8080/logs;
        proxy_http_version 1.1;
        proxy_set_header Connection '';
        proxy_buffering off;
        proxy_cache off;
        chunked_transfer_encoding off;
    }
}

複製以下內容,請務必將 server_name 修改為您的網域 (Ep.1 中設定的那個):

Bash
sudo nano /etc/nginx/sites-available/ddns

3. 啟用設定

建立連結並測試設定是否正確:

Bash
# 建立連結
sudo ln -s /etc/nginx/sites-available/ddns /etc/nginx/sites-enabled/

# 測試 Nginx 設定檔語法 (應顯示 successful)
sudo nginx -t

# 重新載入 Nginx
sudo systemctl reload nginx

Nginx 設定檔語法檢查與重啟指令,驗證反向代理規則正確性 使用 nginx -t 指令檢查反向代理設定是否正確,並重新載入服務。

步驟三:申請 SSL 憑證 (掛上綠色鎖頭)

免費 SSL 憑證 推薦使用 Let’s Encrypt 搭配 Certbot 工具申請,它能自動驗證網域所有權並配置 Nginx 的 HTTPS 設定,且支援自動續期,是目前 自架 DDNS 最標準的加密解決方案。

這是 免費 DDNS 自架 最重要的一步!我們使用 Certbot 來自動申請與安裝 Let’s Encrypt 的免費 SSL 憑證。

💡 進階玩家推薦:如果您想要更快的 OCSP 回應速度,或是單純喜歡 Google 的憑證,可以參考這篇教學改用 Google 原廠憑證:免費申請 Google Trust Services (GTS) SSL 憑證教學。

1. 安裝 Certbot

Bash
sudo apt install -y certbot python3-certbot-nginx

2. 自動申請憑證

執行以下指令,Certbot 會自動驗證網域並修改 Nginx 設定:

Bash
sudo certbot --nginx -d ddns.您的網域.com

過程中系統會詢問是否要強制將 HTTP 轉導向 HTTPS,請務必選擇 Redirect (輸入 2),確保連線永遠加密。

Certbot 自動申請 SSL 憑證成功畫面,顯示 Let's Encrypt 憑證路徑 Certbot 成功為網域申請免費 SSL 憑證,並自動配置 HTTPS 轉導。

步驟四:最終驗證與安全性測試

完成 HTTPS 設定 後,請開啟瀏覽器訪問網域,確認網址列出現鎖頭圖示,並點擊證書檢視是否為 Let’s Encrypt 發行,同時測試管理後台的登入功能與 WebSocket 即時日誌是否正常運作。

恭喜!您已經完成了伺服器端的所有架設工作。

1. 開啟瀏覽器測試

瀏覽器網址列顯示 HTTPS 安全鎖頭,驗證自架 DDNS 網站已加密 開啟瀏覽器測試,確認網址列出現綠色鎖頭,代表 SSL 加密已生效。

在網址列輸入 https://ddns.您的網域.com。

  • 檢查鎖頭:確認網址列旁是否有「鎖頭」圖示,代表 SSL 加密 已生效。
  • 登入測試:輸入 Ep.1 設定的管理員帳號密碼,確認能順利進入儀表板。

2. 測試即時日誌 (v2.0 獨家功能)

在管理介面點擊 「顯示即時日誌」。由於我們在 Nginx 正確設定了 SSE (Server-Sent Events) 支援,您應該能看到系統運作的即時狀態,這對於除錯非常有用。

結語與下集預告

經過 Ep.1 與 Ep.2 的努力,您現在擁有一台:

  1. GCP 永久免費 的高效能主機。
  2. 企業級資安 (Argon2 + AES) 的 Python 核心。
  3. 全自動運作 且具備 HTTPS 加密 的 Web 中控台。

這已經比市面上 90% 的付費 DDNS 服務還要強大了!

但這套系統目前還是「空」的,因為還沒有任何設備連上來。 在最後一篇 【Ep.3:客戶端串接實戰篇】,我們將教您如何將家中的 ASUS 路由器、Synology NAS 或是 OpenWrt 設備,透過簡單的設定串接到這個中控台,徹底擺脫 No-IP 的束縛!

請準備好您的路由器,我們下集見!

💡 Nginx 與 SSL 常見問題

Q1:為什麼需要 Nginx 反向代理?直接用 Python 不行嗎?

A: 雖然 Python 可以直接執行 Web 服務,但在生產環境中,Nginx 處理靜態檔案與 SSL 加密的效能遠高於 Python。使用反向代理能提供更好的安全性、負載平衡,並讓 SSL 憑證管理更自動化。

Q2:Let’s Encrypt 免費 SSL 憑證安全嗎?

A: 非常安全。Let’s Encrypt 提供的憑證採用標準的 TLS 加密技術,其安全性與付費憑證完全相同。唯一的差別是有效期為 90 天,但透過 Certbot 自動續期功能,您完全不需要手動管理。

Q3:如果 Certbot 自動續期失敗怎麼辦?

A: Certbot 會自動建立 Cron Job 定期檢查。如果失敗,您會收到 Email 通知。您可以隨時執行 sudo certbot renew --dry-run 進行測試,或檢查 Nginx 的 80 Port 是否被防火牆阻擋。

RELATED

< NEED_HELP />

想把這篇的做法用在自己的系統上?

寫信講現況,我們回你從哪一步開始。 收到後先回覆能不能做。

// WAITING_FOR_INPUT...