精品軟體與實用教程
Cloudflare使用Workers和Pages部署網站反向代理
使用 Cloudflare Workers 和Pages 進行Proxy網站反向代理是一個非常實用的方法,可以幫助你加速存取、繞過限製或隱藏來源站位址。以下是一個簡潔的教程,教你如何利用這兩者實現反向代理功能。整個過程不需要自行託管伺服器,利用Cloudflare 的邊緣運算能力即可完成。
Cloudflare 不只是一個CDN 服務商,而是一個高效能、低延遲、安全可靠的全球網路平台。
透過其遍布全球的邊緣運算架構,Cloudflare 能夠有效率地加速靜態與動態內容的分發,同時提供精準的快取策略以優化頻寬使用。此外,其內建的無限DDoS 保護機制可有效抵禦各類網路攻擊,確保業務的穩定性與安全性。
今天,我們將利用Cloudflare Workers 與Cloudflare Pages 建立高效率的反向代理服務,以充分發揮Cloudflare 在分散式運算與邊緣網路加速的優勢。
配置網站反向代理前的準備
Cloudflare帳戶
如果還沒有帳戶,請訪問Cloudflare進行註冊!
Cloudflare帳號註冊過程相對簡單,可以使用谷歌帳號、蘋果帳號或自訂的Email進行註冊。
推薦使用Google進行註冊,Google帳戶幾乎覆蓋所有國外的熱門網站,都可以使用Google帳戶進行登錄,如果你還沒有谷歌帳戶的話,趕緊去註冊一個吧!
啟動域名
需要將網域轉移到Cloudflare上面,如果你還不會在Cloudflare中啟動網域的話,下面教你如何啟動網域。
需要更新您的名稱伺服器來啟動Cloudflare。
在Cloudflare後台新增域名,將域名輸入,預設選擇快速掃描DNS記錄,點擊繼續!
選擇免費計劃,域名添加成功!
接下來登入你的網域註冊的網站上,進入後台後,找到並關閉DNS 安全性(DNSSEC) 設置,如果預設是關閉的請無視,您以後可以透過Cloudflare 重新啟用。
將您目前的名稱伺服器替換為Cloudflare 指派的名稱伺服器。
注意:每個網域都會分配不同的名稱伺服器,刪除掉多餘名稱伺服器,在名稱伺服器1和名稱伺服器2中填入Cloudflare 名稱伺服器。
以下以namesilo為例:
在後台點選域名,進入網域操作頁面,編輯名稱伺服器。將名稱伺服器裡的內容刪除掉。
修改名稱伺服器後,儲存即可。個別地區生效時間較晚,暫時不需要理會生效時間。
在Cloudflare後台,如果網域狀態是活動狀態,就表示已經生效了,如果名稱伺服器沒有生效或修改錯誤,會顯示名稱伺服器無效。
GitHub帳戶
如果還沒有帳戶,請訪問GitHub進行註冊!
在GitHub上建立帳戶,只能使用電子郵件註冊,建議使用Gmail註冊。
在信箱中接收驗證碼,填寫完畢後,帳號註冊成功!
使用Workers和Pages部署網站反向代理Proxy
接下來我們使用Workers和Pages部署網站反向代理,有兩種方式來部署網站的反向代理,以下來實踐部署過程。
注意事項
- Workers 方式: 複製_worker.js ,在Cloudflare 中儲存並部署。
- Pages 方式: Fork 倉庫,在Cloudflare 連接GitHub 一鍵部署。
- Workers vs Pages:Workers 更適合純動態代理,Pages 適合混合靜態內容和動態功能。如果只是簡單反向代理,Workers 更直接。
- 免費配額:Cloudflare 免費方案提供每天10 萬次Workers 請求,Pages 也有類似的限制,足夠個人使用,但大規模流量可能需要付費方案。
- 國內存取:workers.dev 和pages.dev 在中國大陸可能被限制,建議綁定自訂網域。
- 安全性:確保目標網站允許代理商訪問,避免違反服務條款。
使用Cloudflare Workers 實現反向代理
Cloudflare Workers 是運行在Cloudflare 全球邊緣節點上的無伺服器腳本,可輕鬆處理HTTP 請求並將其轉發到目標網站。
第一步:註冊並登入Cloudflare
如果你還沒有Cloudflare 帳號,先去官網註冊一個,然後登入。
第二步:建立一個Worker
在Cloudflare 儀表板中,點擊左側運算(Workers)下方的"Workers 和Pages",然後選擇"快速開始"。
給你的Worker 取個名字(預設會產生一個類似yourname.workers.dev 的網域)。
名字填寫完畢後,點選部署,接下來進入部署頁面中
點選編輯程式碼,進入到Worker 編輯器中,刪除預設程式碼,貼上以下簡單反向代理腳本。
第三步:建立反向代理腳本
建立一個自訂的java腳本,以下是反向代理腳本範例:
addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)); }); async function handleRequest(request) { const url = new URL(request.url); // 將要求轉發到網域的目標網站const names name. // 建立新的請求const newRequest = new Request(url, request); return await fetch(newRequest); }
這個腳本會把所有送到你Worker 的請求轉送到example.com。
第四步:保存部署
點選右上角的藍色按鈕"部署",你的Worker 就上線了。你可以透過 https://your-worker-name.yourname.workers.dev 訪問它。
第五步:配置域名
由於workers.dev的網域在國內無法訪問,你需要配置新的網域。
在設定選項下面的網域和路由選單中,點選新增。
選擇自訂網域,然後輸入網域後儲存。這時候網域就新增成功了,可以使用新網域存取了。
到這裡,使用Cloudflare Workers實現反向代理的功能就已經實現了,是不是很簡單。接下來還可以使用Pages部署網站反向代理程式。
使用Cloudflare Pages部署網站反向代理
Cloudflare Pages 是一個靜態網站託管平台,結合Git 倉庫自動化部署,適合快速上線前端專案。它最近新增了Functions 功能(本質上是Workers 的變體),允許在邊緣執行動態程式碼。
Cloudflare Pages 主要用於託管靜態網站,但結合Functions(基於Workers 的功能),也可以實現反向代理。
下面開始使用Cloudflare Pages 部署反向代理程式。
第一步:建立Pages 項目
在Cloudflare 儀錶板的"Workers 和Pages" 中,點擊創建,然後選擇"Pages",點擊"連接到Git"。
連接你的GitHub 或GitLab 倉庫(可以建立一個簡單的空的靜態項目,例如只有一個index.html)。
第二步:連接到儲存庫
這裡以GitHub為例,首先需要在GitHub上建立一個專案。
在Github 上建立倉庫並新增程式碼,登入 Github 之後,如下圖所示,點選建立儲存庫,建立一個名為Cloudflare Pages 的私庫。
注意,這裡建立新的儲存庫要選擇私人的,否則是任何人都可以存取的。
接下來建立新文件,點選creating a new file 建立新文件,建立文件。
下面建立一個名為_worker.js 的文件,然後複製以下程式碼,在第五行單引號裡改成你想要反代的網站,然後儲存,提交更改。
反向代理的js程式碼,注意網域名稱中不要加https,http等字元。
export default { async fetch(request, env) { let url = new URL(request.url); if (url.pathname.startsWith('/')) { url.hostname = '反代位址' let new_request = new Request(url, request); return fetch; };
回到Cloudflare Pages頁面後, 選擇GitHub 後點選"連接GitHub" 按鈕。
頁面跳到Github ,點選Install & Authorize 按鈕。
輸入密碼連接,連接成功後,返回Cloudflare Pages
選擇儲存庫後,點選開始設定。
設定建置和部署頁面可以修改專案名稱,或預設即可,最後點選儲存並部署。
很多人在開始部署的時候顯示失敗。
這是因為Cloudflare Pages 的建置系統版本升級成了v2,在專案的設定選項中,將建置系統版本修改成v1,然後重新部署就可以成功了!
部署成功後,你可以在自訂網域中綁定獨立的網域名稱。
到這裡Cloudflare Pages反向代理就設定完了,是不是很簡單!
Workers 和Pages 部署反向代理的區別和優缺點對比
選擇Workers 的場景:
需要強大的反向代理功能,例如:
- 修改所有類型的回應內容(HTML、XML、JSON 等)。
- 處理複雜的替換規則或動態路由。
- 精確控制響應頭或快取策略。
對效能要求高,希望在服務端完成所有邏輯。
項目涉及邊緣運算或需要全球低延遲響應。
選擇Pages 的場景:
反向代理需求簡單,例如僅代理HTML 並做少量替換。
- 項目主要是靜態網站,只需簡單的反向代理或重定向。
- 不希望額外成本,只依賴免費額度。
- 開發團隊熟悉前端開發,傾向靜態文件部署。
應用多條內容替換規則(包括標題、URL、圖片等)。以下是對比後的建議:
- Workers:
優點:可以完美實現你的腳本,直接在服務端完成所有替換,支援正規表達式和多種內容類型,效能和使用者體驗更好。
推薦理由:你的需求涉及複雜的替換規則(多條正規匹配)和URL 重寫,Workers 更適合。 - Pages:
限制:只能透過客戶端JS 實現替換,效能較差,且無法處理非HTML 內容或回應頭。
適用性:如果預算有限且只代理HTML,可以勉強使用,但體驗不如Workers。
推薦方案:使用Cloudflare Workers。它能完整實現你的反向代理和內容替換需求,且效能和靈活性更優。