Cloudflare Workers 是什麼

Cloudflare Workers 是 Cloudflare 的無伺服器邊緣運算服務,可處理網址轉址、API 與網站請求。贊贊小屋用它讓部分 WordPress 文章網址改由其他來源提供內容。本文依後台操作截圖,介紹 Workers 與 Pages 的差別、帳戶管理方式,以及 Route 路由的查看與編輯。

Cloudflare Workers 是什麼特色圖:網站請求經過中間標示 Worker 的運算節點,再分成回應內容與轉發到其他來源兩條路徑

一、Cloudflare Workers 是什麼?

Cloudflare Workers 是一種無伺服器的邊緣運算服務:不用自己準備與維護主機,就能把程式放在 Cloudflare 的全球網路上,讓進到網站的 HTTP 請求先經過這段程式處理。因為程式是在請求經過的路上執行,Worker 常見的用途包括替網址轉址、提供 API,以及把請求轉發給別的來源。贊贊小屋使用 Worker 的原因很單純:讓部分 WordPress 網址不必由原本的 WordPress 提供內容,而是交給其他來源回應。

要找到 Workers,先從 Cloudflare 的帳戶首頁開始。贊贊小屋登入之後,左上角是目前使用的帳戶,下面依序是「帳戶首頁」「最近造訪」「網域」「Observability」,再往下的「組建」區塊裡有「運算」,展開之後第一個項目就是「Workers 和 Pages」,Worker 的入口就在這裡。

帳戶首頁的中間區域,還整理了三欄清單:「Domains」是這個帳戶下的網域,「Workers」是已經建立的 Worker,「Recents」則是最近造訪過的頁面,例如「Workers 路由」與「網域 / zanzan.tw」。已經在帳戶裡用過 Worker 的話,從首頁的「Workers」欄就能直接點進去,不一定要經過左側選單。

理解 Workers 的第一步,不是先寫程式,而是先知道它在後台的哪個位置:從「運算」底下的「Workers 和 Pages」進去,就是管理所有 Worker 的地方。

Cloudflare 帳戶首頁:左側選單的「運算」底下是「Workers 和 Pages」入口,中間清單列出網域 b88104069.com、zanzan.tw 與四支 Worker 知識卡:Cloudflare Workers 在全球網路上執行程式,網站請求經過 Worker 後,可以產生回應或轉發給其他來源

二、Cloudflare Workers 和 Pages 的差別

Cloudflare Workers 和 Pages 都是用來組建、部署網站與應用的產品,放在同一個後台入口:Workers 的重點是執行程式、處理每一個進來的請求,所以轉址、API 與請求轉發都屬於它擅長的事;Pages 則以網站部署的工作流程為主要特色,適合把前端網站或靜態內容發布出去。不過兩者功能已經有大量交集,Pages 也有執行程式的 Functions,Cloudflare 官方的遷移說明也指出 Workers 的功能範圍比 Pages 更廣。因此初學者不需要硬把它們想成完全不同的兩種東西,先知道它們在同一個後台、各有側重即可。

點進「Workers 和 Pages」之後,頁面最上方的標題旁邊有「檢視文件」按鈕,標題下方的說明是「組建及部署無伺服器功能、網站和完整堆疊應用程式。」從這行說明可以看出,Cloudflare 把 Workers 與 Pages 放在同一個管理介面裡,兩者共用同一個入口。

頁面往下是「計費儀表板」,贊贊小屋的帳戶顯示「可計費使用量(本期)」為「$0.00」,旁邊寫著「尚未產生可計費使用量」。再往下是這個帳戶的使用情況:「要求」為 1.19M、「CPU 時間」為 2.65M ms、「可觀察性事件」為 1.16M。這些數字是整個帳戶的使用統計,不是某一支 Worker 的數字。其中「CPU 時間」指的是 Worker 程式碼實際執行所花的 CPU 時間,等待網路回應的時間不會計入;看到這幾項數字,只需要知道 Worker 實際跑起來之後,用量會反映在這個帳戶總覽裡。

換句話說,這個頁面同時是 Workers 與 Pages 的入口,也是帳戶用量的總覽。想大略知道帳戶裡的 Worker 有沒有在運作,這裡的請求量是第一個可以看的地方;要看單一 Worker 的狀況,則是進入那支 Worker 自己的管理頁面。

Cloudflare「Workers 和 Pages」頁面:標題說明為組建及部署無伺服器功能、網站和完整堆疊應用程式,下方是計費儀表板與帳戶用量 比較卡:Workers 側重程式與請求處理,Pages 側重網站部署,中間標示兩者功能有大量交集

三、Cloudflare Worker 是以帳戶還是網站管理?

Cloudflare Worker 是以帳戶(Account)為單位管理,不是綁在單一網站底下;Worker 要處理哪個網站的網址,則由路由設定決定。贊贊小屋最初想確認的問題,就是兩個網域的 Worker 到底是各自分開管理,還是都放在同一個帳戶裡,答案要從首頁的清單與「Workers 和 Pages」頁面往下看。帳戶首頁的「Domains」欄裡,贊贊小屋有 b88104069.com 與 zanzan.tw 兩個網域;「Workers」欄則列出 zanzan-app-router、zanzan-learner-edge、zanzan-edge-signer-candidate 與 zanzan-static-production 四支 Worker,它們都在同一個帳戶底下。

頁面上方列出這個帳戶的 Worker,畫面中的 zanzan-static-production 下面寫著「zanzan.tw/acct1* + 6 個其他路由」,右側標示「7 天前」,下方有「檢視部署」,還有「47.3k 要求」與「1.8 毫秒」的使用資訊。清單底部寫著「Showing 1 - 4 of 4」,表示這個帳戶一共有四支 Worker,與首頁看到的數量一致。

清單再往下是「帳戶詳細資料」,裡面有兩項資料:「Account ID」與「子網域」。Account ID 是 Cloudflare 帳戶的識別碼,常用於 API 與部署工具。它不是密碼,但公開教學截圖不需要顯示完整編號,因此贊贊小屋會將這項資訊遮蔽;「子網域」是 b88104069.workers.dev,旁邊有編輯用的鉛筆圖示。Worker 如果啟用 workers.dev 位址,網址就會以這個子網域為基礎,所以才會看到 zanzan-static-production.b88104069.workers.dev 這樣的網址。

綜合這幾項資訊就能確認:Worker 屬於帳戶層級,同一個帳戶可以擁有多個網域與多支 Worker,贊贊小屋的帳戶就同時有兩個網域與四支 Worker,並沒有為每個網域各開一個帳戶。至於某支 Worker 要處理哪個網站的哪些網址,則由網站(Zone)與 Worker 的路由(Route)設定來決定:Zone 代表一個網域在 Cloudflare 的設定範圍(網域怎麼加入 Cloudflare,可以參考Cloudflare DNS設定教學),Route 則負責把那個網域上符合網址模式的請求交給指定的 Worker,網址模式本身也必須包含該網域。

Worker 清單與帳戶詳細資料:zanzan-static-production 顯示 7 個網域項目,下方是已遮蔽的 Account ID 與 b88104069.workers.dev 子網域 關係卡:一個 Account 內有多個 Zone 與多支 Worker,Route 連結其中一個 Zone 與一支 Worker

四、Cloudflare Worker 管理介面介紹

從清單點進 zanzan-static-production,就進入單一 Worker 的管理畫面。頁面上方的路徑依序是「Workers 和 Pages」、「zanzan-static-production」,右邊還有「生產」的環境切換,表示目前看的是正式環境。

路徑下方是一排分頁:「概觀」「指標」「部署」「Observability」「問題」「網域」「Access」「設定」。這次實際用到的是「概觀」與「網域」。概觀頁是這支 Worker 的總覽,官方說明裡的概觀會顯示請求、錯誤與 CPU 時間等概況;「指標」可以看這支 Worker 的請求與錯誤等統計,「部署」記錄每個版本與目前正在服務的部署,「Observability」是日誌與查詢功能,「網域」集中管理這支 Worker 的網域、路由、workers.dev 位址與預覽網址,「Access」則和 Cloudflare Access 的登入保護有關。初學者不必把每個分頁都看懂,只要記得「網域」這一頁,路由就在這裡。

「概觀」頁最上方是這支 Worker 的 workers.dev 網址:zanzan-static-production.b88104069.workers.dev。往下是一張關係圖,左邊有三個方塊:「網域」旁邊的數字是 7,「Workers」與「佇列」都是 0;它們共同指向中間的 zanzan-static-production 方塊,方塊裡的 Observability 區域顯示「Workers 日誌」為「已啟用」,「Workers 追蹤」為「已停用」。

這張圖的讀法是:左邊是跟這支 Worker 相連的項目,中間是 Worker 本身,右邊的「繫結」則是用來把 Worker 連到其他資源,贊贊小屋這支 Worker 目前是 0。左邊的「網域」有 7 個;「Workers」與「佇列」這兩項則顯示 0。

zanzan-static-production 的概觀頁:上方分頁有概觀、指標、部署、Observability、問題、網域、Access 與設定,圖中顯示 7 個網域項目 導覽卡:Worker 管理介面的概觀、指標、部署、Observability、網域與 Access 六個功能,其中「網域」是查看路由的入口

五、Cloudflare Worker Route 路由是什麼?

Route(路由)是一條網址規則:進到某個網域的請求,只要符合這條規則,就會觸發指定的 Worker。在概觀頁點開「網域 7」,下方就展開成三個區塊。第一個是「workers.dev」,裡面是 zanzan-static-production.b88104069.workers.dev;第二個是「自訂網域」,贊贊小屋目前沒有設定,只有「新增自訂網域」的選項;第三個是「路由」,列出六條路由:zanzan.tw/acct1*、zanzan.tw/blog*、zanzan.tw/courses*、zanzan.tw/_static/pages/*、zanzan.tw/classroom*,以及 zanzan.tw/archives/*。7 個網域項目,就是 1 個 workers.dev 位址加上這 6 條路由。本文網址範例中的全形星號「*」僅供示意,實際設定 Cloudflare Route 時,應改用鍵盤輸入的半形星號。

以 zanzan.tw/archives/* 為例,贊贊小屋原有的 WordPress 文章網址,有一部分使用 zanzan.tw/archives/ 開頭,所以只要網址落在這個路徑底下,請求就會先交給 zanzan-static-production,由 Worker 的程式決定要自己回應內容,還是再交給原本的來源。規則裡的星號 * 是萬用字元,Cloudflare 官方路由文件說明它代表零個或多個字元,所以 /archives/* 能同時涵蓋這個路徑底下各種不同的文章網址。星號放的位置也會影響範圍,例如 zanzan.tw/blog* 就是 blog 後面不論接什麼字元都算符合。

workers.dev 位址與 Route 是兩種不同的入口。workers.dev 是 Cloudflare 提供給 Worker 的專屬網址,不依附任何自己的網域;Route 則是掛在 zanzan.tw 這種正式網域上的規則,讓原本就存在的網址交給 Worker 處理。這也能說明一件事:同一支 Worker 設有多條 Route,並不代表擁有多個網站,贊贊小屋的六條路由都屬於 zanzan.tw,只是不同路徑各有各的處理規則。

所以看 Route 的重點是:它決定哪些網址會經過 Worker,哪些網址完全不受影響。要確認某個網址有沒有被 Worker 接手,先到這份路由清單,看有沒有符合它的規則。

概觀頁展開網域清單:workers.dev 位址與六條路由,包括 zanzan.tw 底下的 archives、blog、courses 等路徑 知識卡:Route 以 zanzan.tw/archives/ 加星號這類網址模式比對請求,符合規則時觸發 Worker

六、Cloudflare Worker 如何新增路由?

新增路由的入口在 Worker 管理頁的「網域」分頁,按下「新增路由」之後選擇區域、填入網址模式即可。切到「網域」分頁,頁面最上面是「Worker URL」區塊,裡面有兩個位址:「生產」的 zanzan-static-production.b88104069.workers.dev,開關是開啟的,下方寫著「任何人皆可造訪此 URL。」並提供「啟用 Access」的連結;「預覽」的 *-zanzan-static-production.b88104069.workers.dev,開關則是關閉的。

再往下是「自訂網域與路由」。這一區最上面是「搜尋網域」的搜尋欄,右邊有兩個按鈕:「+ 新增路由」與「+ 新增網域」。搜尋欄下方的表格有「名稱」「類型」「區域」三欄,目前看得到的資料是 zanzan.tw/courses* 與 zanzan.tw/_static/pages/*,類型都是「路由」,區域則是 zanzan.tw。

兩個新增按鈕的差別在這裡很重要。「新增網域」是自訂網域(Custom Domain),讓整個網域或子網域直接指向 Worker,Worker 本身就是那個主機名稱的來源,Cloudflare 會代為建立 DNS 紀錄與憑證;「新增路由」則是針對已經存在於 Cloudflare 的網域,指定其中某些網址模式交給 Worker,Worker 站在原本的網站前面,原本的來源仍然存在。贊贊小屋的需求是只讓 zanzan.tw/archives/* 這類部分 WordPress 網址改交給 Worker,zanzan.tw 沒有符合 Worker 路由規則的其他網址,仍維持原本的網站處理方式,所以用的是「新增路由」,而不是「新增網域」。

這一頁的另一個提醒是「Worker URL」的設定。生產用的 workers.dev 位址啟用時可以被任何人造訪,如果不希望對外開放,可以透過 Cloudflare Access 限制存取,也可以評估停用這個網址;預覽位址的開關也是獨立的,這些都和 Route 是分開的設定,不會影響 zanzan.tw 上的路由。Cloudflare 的 workers.dev 官方說明也提醒,workers.dev 偏向個人或測試用途,正式服務建議使用路由或自訂網域。

「網域」分頁:Worker URL 區塊與自訂網域及路由清單,右上角有新增路由與新增網域兩個按鈕 判斷卡:新增路由用於處理既有網站的部分網址,新增網域則讓整個網域指向 Worker

七、Cloudflare Worker Route 如何設定與編輯?

要編輯既有路由,在「網域」分頁的路由清單點選該列的「⋯」,選擇「編輯」,就能修改區域與網址模式。回到「自訂網域與路由」的表格,把清單往下看,六條路由全部列出,名稱依序是 zanzan.tw/courses*、zanzan.tw/_static/pages/*、zanzan.tw/classroom*、zanzan.tw/archives/*、zanzan.tw/blog* 與 zanzan.tw/acct1*,類型都是「路由」,區域都是 zanzan.tw。每一列最右邊都有「⋯」按鈕。

點選 zanzan.tw/archives/* 這一列的「⋯」,會出現一個選單,依序是「編輯」「檢視分析」「檢視網域」,最下面用紅色標示的是「移除」。要修改路由規則,就選「編輯」。

點下「編輯」之後,畫面會跳出「編輯路由」的視窗,裡面有兩個欄位。「區域」是下拉選單,目前選的是 zanzan.tw,表示這條路由屬於哪個網域;「路由」欄位填的是 zanzan.tw/archives/*,欄位右側有綠色勾勾,欄位下方的說明寫著「使用星號 (*) 字元來建立可以比對多個 URL 的動態模式。」視窗底部是「取消」與「儲存」兩個按鈕。

「新增路由」的表單同樣是先決定區域,也就是哪個網域,再填入路由的網址模式;和編輯視窗不同的是,新增時要自己填入內容,編輯則是在既有的規則上修改。贊贊小屋這次只查看了管理位置與表單內容,沒有實際儲存任何變更,所以這裡不代表新路由已經完成部署與驗收。

在正式網站上修改路由之前,最需要確認的是路徑範圍。例如把 zanzan.tw/archives/* 改成範圍更大的模式,原本不需要經過 Worker 的網址,也可能被一起攔下來;選單最下面的「移除」也一樣,路由一旦移除,符合它的請求就不再交給 Worker 處理。另外,官方說明提醒星號不能放在路徑中間,所以不能把模式寫成 zanzan.tw/archives/*.jpg 這種樣子。調整之前,先看清楚自己要影響的是哪些網址,再決定要編輯還是新增。

路由清單的「⋯」選單:選單中有編輯、檢視分析、檢視網域與移除四個選項 「編輯路由」視窗:區域為 zanzan.tw,路由欄位為 zanzan.tw/archives/ 加星號,下方有取消與儲存按鈕 流程卡:編輯既有 Route 依序是網域分頁、路由清單、⋯、編輯,最後確認區域與網址模式

Cloudflare Workers 在網站管理上的實際用途

回到贊贊小屋自己的網站,Worker 最實用的地方,是不必全面取代 WordPress,也能針對特定網址加入新的處理方式。像 zanzan.tw/archives/* 這樣的路由,只讓一部分文章網址交給 Worker 提供內容,其餘的網站仍維持原樣,管理起來既有彈性,也不用一次搬遷整個網站。

整理這次操作可以發現,理解 Workers 不一定要從撰寫 JavaScript 開始。先認識後台的入口,知道 Worker 屬於帳戶、網域由 Zone 管理、網址交給誰處理則看 Route,就已經建立了最基本的網站管理概念。有了這個基礎,之後無論要深入程式,還是只想看懂現有設定,都比較不容易迷路。

總結卡:理解 Cloudflare Workers 的三個入門步驟是找到入口、認識帳戶與理解 Route
發布日期:
分類:WordPress