Portfolio
My Blog
Scroll down to discover
Search
Categories

Tự động chuyển hướng website downtime với Cloudflare Workers – Page Rules miễn phí

September 3, 2025Category : Code/Web

Nó hoạt động như một hệ thống fail-over tự động (chuyển hướng khi lỗi), giúp duy trì dịch vụ khi server chính gặp sự cố mà không cần dùng load balancer phức tạp.

  • Tự động kiểm tra trạng thái website.
  • Nếu thấy DOWN, kiểm tra lại 3 lần để tránh cảnh báo sai.
  • Cập nhật Page Rules trên Cloudflare để chuyển hướng traffic.
  • Gửi thông báo qua Telegram khi website gặp sự cố hoặc hoạt động trở lại.

Tự động chuyển hướng website downtime với Cloudflare Workers – Page Rules miễn phí

Bước 1: tạo 2 Page Rule như sau

Tự động chuyển hướng website downtime với Cloudflare Workers – Page Rules miễn phí

Tạo Page Rule – pageRuleId

  • URL (required) bibica.net/*
  • Forwarding URL 302 – Temporary Redirect
  • Enter destination URL (required) https://static.bibica.net/$1

Rule này sẽ bật khi trang chủ bị sập, khi trang chủ hoạt động, nó sẽ tắt

Đây là rule quan trọng nhất, sẽ chuyển hưởng bibica.net sang -> static.bibica.net, ví dụ https://bibica.net/tao-trang-tinh-cho-wordpress-voi-simply-static-va-vercel/ sẽ tự chuyển sang https://static.bibica.net/tao-trang-tinh-cho-wordpress-voi-simply-static-va-vercel/

Tương tự tạo thêm 1 Page Rule – pageRuleBackupId

  • URL (required) static.bibica.net/*
  • Forwarding URL 302 – Temporary Redirect
  • Enter destination URL (required) https://bibica.net/$1

Mục đích của rule này, để khi trang chủ hoạt động, truy cập vào trang backup, sẽ tự chuyển hướng về trang chủ (rule này sẽ bật khi trang chủ hoạt động, khi trang chủ bị sập, nó sẽ tắt)

Cụ thể khi trang chủ hoạt động

  • Tắt pageRuleId,  Bật pageRuleBackupId

Khi trang chủ bị sập

  • Bật pageRuleId,  Tắt pageRuleBackupId

Lấy ID của 2 rule này

  • Cài đặt jq nếu chưa có (Ubuntu)
sudo apt update
sudo apt install jq -y
  • Chạy đoạn curl bên dưới
curl -X GET "https://api.cloudflare.com/client/v4/zones/your-zone-id/pagerules" 
  -H "X-Auth-Email: [email protected]" 
  -H "X-Auth-Key: your-cloudflare-api-key" 
  -H "Content-Type: application/json" | jq -r '.result[] | "(.id) - (.targets[0].constraint.value)"'

Thay your-zone-id[email protected]your-cloudflare-api-key thay bằng các thông số của bạn

Như trường hợp của mình, nó sẽ ra 2 ID như sau

Bước 2: tạo và cấu hình Cloudflare Worker

  • Script quản lý thông qua API Clouflare, không cần phải chạy worker qua tài khoản chính đang quản lý domain, nên tạo 1 tài khoản Cloudflare mới, có 100,000 request miễn phí, chạy riêng cho vấn đề này, hạn chế vấn đề hết request, hiệu quả hơn

Tự động chuyển hướng website downtime với Cloudflare Workers – Page Rules miễn phí

  • Tạo 1 KV có tên: NOTIFICATION_STATUS

Tự động chuyển hướng website downtime với Cloudflare Workers – Page Rules miễn phí

  • Workers & Pages -> Create Wordker

Tự động chuyển hướng website downtime với Cloudflare Workers – Page Rules miễn phí

  • Đặt 1 tên tùy ý, sau đó ấn vào Deploy

Tự động chuyển hướng website downtime với Cloudflare Workers – Page Rules miễn phí

  • Ấn tiếp vào Continue to project

Tự động chuyển hướng website downtime với Cloudflare Workers – Page Rules miễn phí

Quay lại phần Setting, sẽ thấy Trigger Events nằm bên trong Domain & Routes

  • Ấn vào Add, chọn Cron Triggers

Tự động chuyển hướng website downtime với Cloudflare Workers – Page Rules miễn phí

  • Cron expression sửa lại thành */1 * * * *, sau đó ấn Save lại

Tự động chuyển hướng website downtime với Cloudflare Workers – Page Rules miễn phí

  • Bindings -> Add -> KV namespace, chọn NOTIFICATION_STATUS, Variable name đặt là NOTIFICATION_STATUS

Tự động chuyển hướng website downtime với Cloudflare Workers – Page Rules miễn phí

  • Ấn tiếp vào Edit code

Xóa hết code cũ đang có, thay bằng đoạn code tại đây, chỉnh sửa lại cho phù hợp với nhu cầu

const CONFIG = {
  apiEmail: '[email protected]',
  apiKey: 'your-cloudflare-api-key',
  zoneId: 'your-cloudflare-zone-id',
  pageRuleId: 'your-main-page-rule-id',
  pageRuleBackupId: 'your-backup-page-rule-id',
  targetDomain: 'yourdomain.com',
  checkInterval: 5000, // Kiểm tra mỗi 5 giây
  maxRetries: 3, // Số lần kiểm tra lại khi gặp lỗi
  retryDelay: 15000, // Thời gian giữa các lần kiểm tra lại
  telegram: {
    botToken: 'your-telegram-bot-token',
    chatId: 'your-telegram-chat-id'
  }
};

pageRuleIdpageRuleBackupId là 2 giá trị dễ ĐIỀN NHẦM nhất, đã giải thích khá cụ thể ở phần tạo Page Rule, các thông số khác thì cơ bản, cứ điền vào như thông thường

targetDomain là trang cần check DOWN/UP

Các giá trị checkIntervalmaxRetriesretryDelay để mặc định là đủ

  • Xong xuôi thì ấn vào Deploy

Có thể vào Observability Workers Logs -> enabled để xem thêm log cũng được

Khi trang bị sập hay khi chạy lại, sẽ nhận được thông báo qua Telegram tương tự như thế, thử nghiệm bạn có thể dùng 1 domain phụ, rồi bật tắt trang đó, xem các Page Rule hoạt động chính xác như thế không là được

Chú ý 2 Page Rule lúc này sẽ hoạt động theo tình trạng của targetDomain, bạn có bật tắt thủ công, khi tới cron chạy, nó cũng sẽ tự điều chính về lại

Khuyết điểm

Bới ra để phàn nàn là vấn đề Workers, họ không cho chạy 1 script quá lâu, phiên bản này ban đầu cấu hình 1s chạy 1 lần, mà ở cường độ này, báo đủ các log lỗi, xử lý mãi vẫn thấy không quá hài lòng

Cụ thể nếu trang sập hoàn toàn, trung bình 30-40s mới hoàn thành quá trình check, nếu trang hoạt động lại, 10-15s mới thấy tin nhắn thông báo tới, so với con số đang set là 5s chạy 1 lần vẫn có độ lệch nhất định, đúng ra tối đa 20s nó phải hoàn thành quá trình check DOWN, và 5s cho quá trình check UP

Có điều nói sao thì nói, hiệu quả sử dụng vẫn rất tốt ở sử dụng thực tế, vì trang của bạn nếu sập, chưa tới 1 phút là sẽ được chuyển sang trang dự phòng

 

01.
© Oliver / All rights reserved.
To top