利用Cloudflare worker來進行客戶端IP查找

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"))
}

點擊[儲存並佈署]後, 就可以利用介面上的網址來測試:

https://ip.diary.workers.dev/

若沒問題, 再來就是指向對應的自訂網域的網址, 在這個 worker 上, 點[觸發程序]頁籤:

點右邊的[新增路由], 輸入 ip.diary.tw/*

再來就是在 DNS 上新增一筆 ip.diary.tw A 記錄, 指向隨意的一個位置, 而且要啟用”通過proxy處理”(橘色雲), 就可以實現這個取得 ip 服務, 而且由 worker 回應出來:

https://ip.diary.tw/

請注意, 這個 worker 雖然免費方案可用, 但用量有一定限制, 請參考:

https://developers.cloudflare.com/workers/platform/pricing/

每日有10萬次呼叫使用量, 還蠻大方的, 在快到用量時還會先發 email 通知, 不用太擔心, 大家可以試看看囉.

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。