Cloudflare 有個功能, 就是在 edge 端的 worker, 可以參考:
https://developers.cloudflare.com/workers/
我們可以利用這個 worker 來做許多功能, 把它想成小型的在邊緣的處理器, 先來看一些 example 好了:
https://developers.cloudflare.com/workers/examples/
理解可以在這個 worker 處理不少事情後, 接下來實做一個簡單的功能, 像是這種取客戶端 IP 的功能:
早期也有利用 PHP 寫過取 IP 功能的小程式, 可以參考:
不過這裡要介紹的是利用 cloudflare 的 worker 來進行.
首先需要一個 cloudflare 的帳戶, 並且有至少一個網址服務在線上, 這樣就可以在對應的網址上啟動 worker 處理訪問.
在介面上可以從這裡進入:
進入 Workers 介面後, 可以點一下[建立服務], 給定一個自訂的服務名稱, 這裡定為 ip, 選擇啟動器, 這裡用 HTTP 處理常式, 再按下右下的[建立服務].
建立服務後, 就可以開始寫程式了, 語法如同一般的 Javascript:
程式碼中的 handleRequest() 中, 改為如下:
addEventListener("fetch", event => { event.respondWith(handleRequest(event.request)) }) async function handleRequest(request) { return new Response(request.headers.get("x-real-ip")) }
點擊[儲存並佈署]後, 就可以利用介面上的網址來測試:
若沒問題, 再來就是指向對應的自訂網域的網址, 在這個 worker 上, 點[觸發程序]頁籤:
點右邊的[新增路由], 輸入 ip.diary.tw/*
再來就是在 DNS 上新增一筆 ip.diary.tw A 記錄, 指向隨意的一個位置, 而且要啟用”通過proxy處理”(橘色雲), 就可以實現這個取得 ip 服務, 而且由 worker 回應出來:
請注意, 這個 worker 雖然免費方案可用, 但用量有一定限制, 請參考:
https://developers.cloudflare.com/workers/platform/pricing/
每日有10萬次呼叫使用量, 還蠻大方的, 在快到用量時還會先發 email 通知, 不用太擔心, 大家可以試看看囉.