Tự động chuyển hướng website downtime với Cloudflare Workers – Page Rules miễn phí
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.
Bước 1: tạo 2 Page Rule như sau
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
jqnế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ạo 1 KV có tên:
NOTIFICATION_STATUS
- Workers & Pages -> Create Wordker
- Đặt 1 tên tùy ý, sau đó ấn vào Deploy
- Ấn tiếp vào Continue to project
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
- Cron expression sửa lại thành
*/1 * * * *, sau đó ấn Save lại
- Bindings -> Add -> KV namespace, chọn
NOTIFICATION_STATUS, Variable name đặt làNOTIFICATION_STATUS
- Ấ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'
}
};
pageRuleId, pageRuleBackupId 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ị checkInterval, maxRetries, retryDelay để 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










