2026.07 · CASE STUDY / INFRASTRUCTURE

官網遷移實戰記錄:從 Cloudflare Workers 到 Google Cloud VPS

官網真實發生過的遷移過程——包含踩過的坑跟實際解法。既然要幫客戶做雲端與資安維運,自己的網站就該先經得起同樣的檢驗。

官網一開始架在 Cloudflare Workers 上,用的是 Cloudflare 的共用 Anycast IP。直到有一天,客戶回報「公司網路打不開 juclarity.com」——查下去才發現,問題不是我們的網站,而是共用 IP 的信譽問題。這篇記錄下完整的處理過程。

起因:共用 IP 的信譽被別人拖累

Cloudflare 免費/專業版方案的 IP 是數千個網站共用的。只要同一組 IP 上曾經有其他網站被濫用(例如發送惡意內容、被判定為釣魚站),這組 IP 就可能被資安廠商的威脅情資資料庫列入黑名單——即使我們自己的網站完全乾淨。這正是某位客戶的公司防火牆會擋掉 juclarity.com 的原因:不是網域被列黑名單,是「湊巧分到的鄰居」有問題。

治本的解法只有一個:換成不與他人共用的獨立 IP。

選擇 Google Cloud Compute Engine 的原因

評估過 VPS 服務商(Vultr、DigitalOcean、Linode),最後選擇 Google Cloud,原因有三:剛好有免費試用額度可以運用;Compute Engine 提供台灣本地機房(asia-east1,彰化),對台灣訪客延遲最低;每台虛擬機器本來就配發獨立的外部 IP,天生符合需求。

環境建置

  • VM 規格e2-small,Ubuntu 24.04 LTS,機房 asia-east1-c
  • 靜態 IP:預設的外部 IP 是暫時性的,重開機會變動,第一步就是把它保留成靜態 IP,避免之後 DNS 又要重設
  • 網頁伺服器選 Caddy,不選 Nginx:Caddy 會自動向 Let's Encrypt 申請並續簽 HTTPS 憑證,不需要額外設定 certbot,對純靜態網站來說設定量最小
  • 防火牆:用 ufw 只開放 SSH、80、443 三個埠
  • fail2ban:防止 SSH 被暴力破解

DNS 切換

juclarity.com 的 A 記錄改指向 VPS 的靜態 IP,Proxy 狀態設為「僅 DNS」(灰雲),讓流量直接打到獨立 IP,不再經過 Cloudflare 共用網路。www.juclarity.com 則刻意維持 Cloudflare Proxy(橘雲),透過 Redirect Rule 做 301 轉址到不帶 www 的版本——這樣兩種網址都能正常使用,同時避免被搜尋引擎判定為重複內容。

眉角:切換前記得先移除 Cloudflare Workers 的自訂網域綁定,不然 DNS 記錄會被鎖定成「Worker」類型,沒辦法直接改成一般的 A 記錄。

資安強化清單

網站搬家是重新盤點資安設定的好機會,這次一併確認/補上:

  • SSL/TLS 模式設為 Full (strict),開啟 Always Use HTTPS 與 HSTS
  • 開啟 DNSSEC,防止 DNS 快取污染
  • 透過 Caddy 設定安全性標頭:CSP、X-Frame-Options、X-Content-Type-Options、Referrer-Policy、Permissions-Policy
  • SPF 記錄從 ~all(軟性失敗)收緊為 -all(硬性拒絕),DMARC 從無到有設為 p=reject,防止網域被冒用寄送釣魚信
  • 新增 /.well-known/security.txt,讓資安研究人員發現漏洞時知道該聯繫誰

部署自動化:從手動 SSH 到一行指令

最早期是每次改完內容,手動壓縮、透過瀏覽器 SSH 視窗上傳、再一行一行下指令解壓縮同步,相當耗時。後來裝上 Google Cloud CLI,寫成一支部署腳本,改用 rsync 同步並自動清理暫存檔——現在更新網站只需要一行指令,體驗跟當初用 Wrangler 部署到 Cloudflare Workers 時一樣順手。

後來進一步改在 WSL2(Windows 內建的 Linux 環境)裡執行整套流程,比在 Windows PowerShell 底下更穩定,少了好幾個 Windows 特有的毛病。

過程中踩過的坑

記錄下來,給日後做類似遷移的人參考:

  • PowerShell 執行原則擋住指令碼:Windows 預設不給執行本機腳本,需要用系統管理員權限跑一次 Set-ExecutionPolicy RemoteSigned
  • 解壓縮出來的檔案「未經數位簽署」跑不動:Windows 會替下載的檔案加上隱藏標記,需要用 Unblock-File 移除
  • gcloud 用本機使用者名稱登入,卻對不上遠端帳號:本機使用者名稱含中文或跟 Google 帳號不同時,容易連進 VM 卻用錯 Linux 帳號寫檔案,解法是在指令裡明確指定 使用者@主機,不要依賴自動判斷
  • 忘記在新 VM 上先裝 rsync:同步指令直接失敗,補裝一次即可
  • Windows 終端機中文編碼問題:部署腳本印出的中文訊息容易變亂碼,純粹是顯示問題,不影響實際部署結果

整套流程走完一輪之後,現在的部署速度、資安設定的完整度,反而比原本掛在 Cloudflare Workers 上的版本更扎實。這篇記錄的每一步,也是我們實際提供給客戶的雲端建置與資安顧問服務裡會用到的方法——不是紙上談兵,是自己網站正在運作的架構。

想幫您的網站或系統做類似的健檢與遷移?

我們提供 Google Cloud 環境建置與 Cloudflare 資安設定服務,歡迎聯繫討論。

寄信聯繫我們