1288 字
6 分鐘

Cloudflare Workers Preview URL 怎麼關?用 workers_dev 與 preview_urls 避免誤公開

Cloudflare Workers 的 Preview URL 是版本部署後可以直接存取的測試入口,不等於你在 production 使用的自訂網域。最容易誤判的情境是:你把 workers_dev 關掉了,卻沒有確認目前 Wrangler 版本與 preview_urls 的實際設定。

直接結論是:不要把預設行為當成安全策略;在 Wrangler 設定檔明確寫入 preview_urls: falsepreview_urls = false,再用 Dashboard 或實際請求確認版本與別名入口都已關閉。 如果預覽必須對外提供,則搭配 Cloudflare Access,不要把測試資料直接放在公開 URL 上。

workers_devpreview_urls 管的是兩個入口#

workers_dev 控制 Worker 是否使用 workers.dev 路由;Preview URL 則是版本或別名對應的預覽入口。兩者常常一起出現,但不能只看其中一個欄位就判斷外部能否存取。

設定你要回答的問題目前文件的預設方向
workers_dev是否保留一般的 *.workers.dev 路由?由 Worker 設定與部署方式決定
preview_urls是否讓版本與 aliased preview URL 可路由?未明確設定時,最新行為會跟著 workers_dev
Cloudflare Access預覽入口是否需要登入?啟用後限制符合 Access policy 的訪客

Cloudflare 文件也特別提醒,Preview URL 啟用後預設是公開的;它不是只在本機或私有網路中可見的測試網址。

用設定檔消除版本差異#

JSON 設定可以寫成:

{
"name": "example-worker",
"main": "src/index.ts",
"workers_dev": false,
"preview_urls": false
}

如果使用 TOML,對應寫法是:

name = "example-worker"
main = "src/index.ts"
workers_dev = false
preview_urls = false

這裡的重點不是一定要關閉 Preview URL,而是把意圖寫進版本控制。若團隊需要 preview,將值改成 true,並在同一份設定與部署檢查中處理 Access、測試資料和 callback URL。

先查看執行部署的 Wrangler 版本與設定檔:

Terminal window
wrangler --version
rg -n 'workers_dev|preview_urls|routes|domains' wrangler.jsonc wrangler.json wrangler.toml 2>/dev/null

Cloudflare 的版本行為曾經分成三段:4.34.0 以前預設開啟;4.34.0 到 4.44.0 以前預設關閉;4.44.0 之後,未明確設定時才改為跟著 workers.dev。因此,明確寫出 preview_urls 比依賴「這台 CI 剛好安裝哪個 Wrangler」更容易維護。

需要預覽時,先處理公開範圍#

版本預覽與 alias 預覽都可能對應到 workers.dev 子網域。即使 URL 只會放在 Pull Request 留言,也不代表它天然需要登入。若 preview 會讀取真實資料、呼叫 production API,或包含尚未公開的功能,先做三件事:

  1. 把預覽使用的 binding、資料庫和 API endpoint 指向測試資源。
  2. 在 Worker 設定中明確確認 preview_urls = true 的理由與負責人。
  3. 到 Workers > Settings > Domains & Routes,為 Preview URLs 啟用 Cloudflare Access,並檢查 policy 的 email、群組或其他條件。

若你的需求其實是讓私有網站登入,而不是讓每個版本都公開,可以先參考 Cloudflare Access 私有 HTTP 網站的瀏覽器登入檢查,不要用「藏住 URL」代替身份驗證。

部署後怎麼驗證真的關閉#

先把設定檔、部署命令與使用的 Wrangler 版本記錄在同一個變更中。若目前已有版本預覽,從 Dashboard 的 Deployments 找到 versioned URL 和 aliased URL,各自測試;不要只測自訂網域。

可以保留一個不含敏感資料的 smoke test:

Terminal window
curl -I https://<preview-url>

這個命令只回答 HTTP 入口目前的回應,不能證明 binding、Access policy 或資料來源都正確。若要重新產生版本預覽,wrangler versions upload 會建立版本並回傳預覽 URL;執行前先確認你是在測試帳號、測試 binding 和正確的 Wrangler environment。

另外,Durable Objects Worker 目前不會產生 Preview URL。這是平台限制,不是把 preview_urls 設成 false 後的替代行為;遇到沒有 URL 的情況,先查 Worker 類型與部署輸出,再判斷是否為設定問題。

最後的判斷順序#

Cloudflare Workers Preview URL 的安全邊界可以縮成四個問題:目前用哪個 Wrangler?preview_urls 有沒有明確設定?版本與 alias URL 是否都測過?預覽是否需要 Cloudflare Access?把這四項寫進部署檢查,才不會因為 workers_dev 的狀態或 CLI 升級而誤判公開範圍。

常見問題#

Q: workers_dev = false 就一定不會有 Preview URL 嗎?#

A: 最新 Cloudflare 文件的預設是 Preview URL 跟著 workers_dev,但舊 Wrangler 版本的預設行為不同,也可能存在已部署的版本或 alias。若要求確定關閉,請在設定檔明確寫 preview_urls = false,並從 Dashboard 和實際 URL 驗證。

Q: Preview URL 可以只讓團隊成員看到嗎?#

A: 可以把 Cloudflare Access 套到 Preview URLs,再用 Access policy 限制 email、群組或其他條件。啟用 Access 前仍要把 preview 的資料來源與 callback 設定和 production 分開,因為身份驗證不會自動替你隔離 Worker binding。

Q: 為什麼 wrangler versions upload 沒有產生 Preview URL?#

A: 先確認 Wrangler 版本、preview_urls 設定、Worker 是否使用 Durable Objects,以及目前帳號與部署環境。Cloudflare 文件列出 Durable Objects 和 Workers for Platforms 使用者 Worker 都有 Preview URL 限制。

參考資料:

Cloudflare Workers:Preview URLs

Cloudflare Changelog:Preview URL 預設行為跟隨 workers.dev

Cloudflare Workers:Configuration

Cloudflare Workers Preview URL 怎麼關?用 workers_dev 與 preview_urls 避免誤公開
https://laplusda.com/posts/cloudflare-workers-preview-url/
作者
Zero
發佈於
2026-08-10
許可協議
CC BY-NC-SA 4.0
這篇文章有幫助嗎?

回報錯字、失效連結,或告訴我你想看的延伸主題。