⚡ Ep.2 技術速查:GCP Nginx 反向代理與 SSL 關鍵指令
老手專用區:如果您已經完成 Ep.1 環境建置,只需複製以下關鍵指令,即可快速部署 Nginx 反向代理 與 免費 SSL 憑證。
sudo apt update && sudo apt install nginx certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-domain.com
sudo certbot renew --dry-run
歡迎回到 自架 DDNS 系列教學!在 [Ep.1 環境架設篇] 中,我們成功在 GCP 永久免費 主機上部署了 Python 核心程式,並完成了 Argon2 密碼雜湊與 AES 設定檔加密。
但根據 克隆資訊實驗室 的資安檢測,目前的系統還有兩個致命傷:
- 手動運作:如果您關閉 SSH 視窗或主機重開機,服務就會停止,導致 DDNS 解析失效。
- 連線不安全:目前使用的是 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. 建立服務設定檔
我們已為您準備好標準範本。請使用編輯器建立服務檔案:
sudo nano /etc/systemd/system/ddns.service
2. 填入設定內容
請複製以下內容,並將 YOUR_USERNAME 修改為您的實際使用者名稱 (GCP 預設通常是您的 Google ID):
[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

編輯完成後,按 Ctrl+X,輸入 Y,然後按 Enter 存檔。
3. 啟用服務
執行以下指令,讓服務生效並立即啟動:
# 重新載入設定
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
sudo apt install -y nginx
2. 設定 Nginx 轉發規則
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 中設定的那個):
sudo nano /etc/nginx/sites-available/ddns
3. 啟用設定
建立連結並測試設定是否正確:
# 建立連結
sudo ln -s /etc/nginx/sites-available/ddns /etc/nginx/sites-enabled/
# 測試 Nginx 設定檔語法 (應顯示 successful)
sudo nginx -t
# 重新載入 Nginx
sudo systemctl reload nginx

步驟三:申請 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
sudo apt install -y certbot python3-certbot-nginx
2. 自動申請憑證
執行以下指令,Certbot 會自動驗證網域並修改 Nginx 設定:
sudo certbot --nginx -d ddns.您的網域.com
過程中系統會詢問是否要強制將 HTTP 轉導向 HTTPS,請務必選擇 Redirect (輸入 2),確保連線永遠加密。

步驟四:最終驗證與安全性測試
完成 HTTPS 設定 後,請開啟瀏覽器訪問網域,確認網址列出現鎖頭圖示,並點擊證書檢視是否為 Let’s Encrypt 發行,同時測試管理後台的登入功能與 WebSocket 即時日誌是否正常運作。
恭喜!您已經完成了伺服器端的所有架設工作。
1. 開啟瀏覽器測試

在網址列輸入 https://ddns.您的網域.com。
- 檢查鎖頭:確認網址列旁是否有「鎖頭」圖示,代表 SSL 加密 已生效。
- 登入測試:輸入 Ep.1 設定的管理員帳號密碼,確認能順利進入儀表板。
2. 測試即時日誌 (v2.0 獨家功能)
在管理介面點擊 「顯示即時日誌」。由於我們在 Nginx 正確設定了 SSE (Server-Sent Events) 支援,您應該能看到系統運作的即時狀態,這對於除錯非常有用。
結語與下集預告
經過 Ep.1 與 Ep.2 的努力,您現在擁有一台:
- GCP 永久免費 的高效能主機。
- 企業級資安 (Argon2 + AES) 的 Python 核心。
- 全自動運作 且具備 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 是否被防火牆阻擋。
