Cloudflare cho Frontend Developer · Phần 12 — Chi phí, giới hạn gói Free và đối chiếu với AWS
Gói Free của Cloudflare cho gì, giới hạn ở đâu (upload 100 MB, timeout origin, cổng proxy, wildcard SSL, số rule), khi nào đáng trả tiền, và bảng dịch Route 53, CloudFront, S3, ACM, WAF sang Cloudflare cùng tiêu chí chọn.
“Miễn phí tới đâu?” là câu hỏi thực dụng nhất về Cloudflare, và câu trả lời ngắn là: xa hơn bạn nghĩ, nhưng có vài bức tường cứng mà bạn nên biết trước khi thiết kế tính năng upload file lớn hay một API xử lý lâu. Câu hỏi thứ hai đến từ những người đã quen AWS: “cái này tương đương CloudFront hay Route 53?”, và từ những người chưa quen: “học Cloudflare rồi có cần AWS nữa không?”.
Bài này gom hai chương của tài liệu gốc. Nửa đầu là bảng kê gói Free và các giới hạn kỹ thuật thật sự chạm phải, kèm cách lách hợp lệ. Nửa sau là bảng dịch khái niệm AWS ↔ Cloudflare và tiêu chí chọn, để bạn chuyển kiến thức qua lại giữa hai bên thay vì học hai lần. Nếu bạn chưa từng đụng AWS, đọc nửa đầu rồi lướt nửa sau cũng được; khi nào đọc series AWS bạn sẽ quay lại.
Gói Free cho bạn những gì
| Hạng mục | Gói Free |
|---|---|
| Số tên miền (zone) | Không giới hạn |
| Băng thông qua proxy | Không giới hạn |
| Bản ghi DNS | Có trần theo gói (vài trăm bản ghi mỗi zone ở Free) — quá đủ cho dự án thường |
| Chống DDoS | Không giới hạn, cả tầng mạng lẫn tầng ứng dụng |
| SSL (Universal) | Có, tự gia hạn |
| Cloudflare Pages | Băng thông không giới hạn, 500 build mỗi tháng, 1 build đồng thời |
| Workers và Pages Functions | 100.000 request mỗi ngày, khoảng 10 ms CPU mỗi request |
| Page Rules (thế hệ cũ) | 3 rule |
| Redirect / Transform / Cache Rules | Một số lượng rule nhất định mỗi loại, đủ dùng cho dự án thông thường |
| WAF Custom Rules | Số lượng hạn chế (5 rule) |
| Rate Limiting | 1 rule, chu kỳ đếm 10 giây, theo IP |
| Purge cache | Miễn phí: everything, by URL, by prefix, by hostname, by tag; API có giới hạn tần suất theo gói |
| Web Analytics | Có, kèm Core Web Vitals |
| Email Routing | Có — chuyển tiếp email tên miền riêng về Gmail miễn phí |
| Turnstile | Có — widget chống bot thay captcha cho form |
| R2, KV, D1 | Có free tier riêng cho từng dịch vụ; kiểm tra pricing hiện tại |
Ghi chú: với một dự án cá nhân hoặc một doanh nghiệp nhỏ, gói Free gần như luôn đủ. Rất nhiều website thương mại đang chạy hoàn toàn trên gói Free. Bạn chỉ cần nâng cấp khi cần một tính năng cụ thể: WAF nâng cao với bộ rule OWASP, Image Optimization, phân tích chi tiết hơn, hỗ trợ và cam kết SLA, hay regex trong rule.
Con số rule ở gói Free
Tài liệu gốc cố ý không ghi số vì nó thay đổi. Tại thời điểm viết, docs ghi: Cache Rules 10, Transform Rules 10 (tính chung ba loại rewrite URL, sửa header request, sửa header response), Redirect Rules cùng bậc, Configuration Rules cùng bậc, WAF Custom Rules 5, Rate Limiting 1, Page Rules cũ 3. Dashboard hiện bộ đếm “đã dùng / tối đa” ngay đầu mỗi danh sách rule, nên bạn không cần nhớ: hết chỗ thì gộp rule bằng or trong biểu thức, hoặc chuyển những redirect hàng loạt sang Bulk Redirects.
Một giới hạn ít người để ý cho tới khi vấp: regex trong biểu thức rule (matches, regex_replace) cần gói Business trở lên. Ở Free và Pro, viết rule bằng starts_with, ends_with, contains, eq, in và hàm concat. Ví dụ rewrite /blog/* sang /wp/* ở Phần 7 nếu dùng regex_replace sẽ bị dashboard từ chối ở gói Free; thay bằng biểu thức nối chuỗi với http.request.uri.path cắt tiền tố, hoặc làm bằng một Worker mười dòng.
Giới hạn kỹ thuật cần biết
| Giới hạn | Giá trị và ảnh hưởng |
|---|---|
| Kích thước tối đa mỗi lần upload qua proxy | Khoảng 100 MB ở gói Free và Pro (Business và Enterprise cao hơn). Ảnh hưởng trực tiếp tới tính năng upload file lớn: request body vượt ngưỡng bị Cloudflare chặn ngay ở edge với mã 413, chưa kịp tới origin. |
| Thời gian chờ origin | Khoảng 100 giây (docs hiện tại: 125 giây cho Proxy Read Timeout) → lỗi 524. Tác vụ dài phải làm bất đồng bộ. |
| Cổng được proxy | Chỉ một tập cổng web nhất định (bảng dưới). Ứng dụng nghe cổng 3000 sau đám mây cam là không ai truy cập được. |
| Wildcard SSL | Universal SSL chỉ phủ example.com và một cấp *.example.com; a.b.example.com cần Advanced Certificate Manager (trả phí) hoặc đổi cấu trúc. |
| Workers | 100.000 request mỗi ngày cho cả tài khoản, khoảng 10 ms CPU và 50 subrequest mỗi request. |
| Pages | 500 build mỗi tháng, 20.000 file và 25 MiB mỗi file cho một lần deploy. |
Các con số trên có thể thay đổi. Trước khi thiết kế hệ thống phụ thuộc vào một giới hạn cụ thể, hãy kiểm tra tài liệu chính thức.
Cổng được hỗ trợ khi bật đám mây cam
| Giao thức | Cổng |
|---|---|
| HTTP | 80, 8080, 8880, 2052, 2082, 2086, 2095 |
| HTTPS | 443, 2053, 2083, 2087, 2096, 8443 |
Cổng khác (3000 của Vite dev server, 5432 của Postgres, 22 của SSH, 25 của SMTP) không đi qua proxy được. Hai lựa chọn: để origin nghe 443 (nginx reverse proxy trước app Node như ở Phần 3), hoặc để bản ghi đó đám mây xám và chấp nhận lộ IP.
Lách hợp lệ cho upload lớn và tác vụ dài
Upload lớn. Đừng cho file đi qua Cloudflare rồi qua backend. Cách chuẩn: backend cấp một URL có chữ ký (presigned URL) trỏ thẳng vào nơi lưu trữ (R2 hoặc S3), trình duyệt PUT file thẳng lên đó, backend chỉ nhận thông báo “đã xong”. Cloudflare không nằm trên đường đi của byte nào, giới hạn 100 MB không còn liên quan, và origin không phải giữ kết nối trong lúc người dùng upload qua 4G. Cơ chế presigned URL được giải thích chi tiết ở AWS phần 5; R2 dùng đúng API S3 nên code gần như giữ nguyên. Phương án dở hơn nhưng đôi khi cần: đặt endpoint upload ở subdomain đám mây xám (upload.example.com), mất bảo vệ của Cloudflare cho riêng endpoint đó.
Tác vụ dài. Export báo cáo, render video, gọi một API bên thứ ba chậm: đừng bắt một request HTTP chờ. Backend trả về ngay 202 Accepted kèm jobId; frontend hỏi lại /api/jobs/:id mỗi vài giây (hoặc mở WebSocket, thứ Cloudflare proxy được) cho tới khi xong. Mô hình này còn giúp người dùng đóng tab mà việc vẫn chạy, và không ai phải nhìn spinner 90 giây rồi nhận 524.
”Băng thông không giới hạn” nghĩa là gì
Không giới hạn áp dụng cho lưu lượng web thông thường qua proxy: HTML, JS, CSS, ảnh, API. Điều khoản dịch vụ của Cloudflare vẫn giới hạn việc dùng proxy gói Free để phân phối video hay khối lượng lớn file không phải nội dung web; cho những thứ đó Cloudflare có R2 (object storage không tính phí truyền ra) và Stream (video). Nếu dự án của bạn là site tải file hoặc phát video, hãy đọc điều khoản hiện tại và đặt file lên R2 thay vì để origin phục vụ qua proxy. Với 99% site frontend, bạn không bao giờ chạm tới ranh giới này.
Khi nào đáng trả tiền
Không có giá cụ thể ở đây vì chúng thay đổi; kiểm tra trang pricing. Nhưng có một danh sách những thứ thường là lý do đầu tiên khiến một dự án frontend mở ví:
| Nhu cầu | Thứ cần mua |
|---|---|
| Worker vượt 100.000 request mỗi ngày, hoặc cần CPU hơn 10 ms | Workers Paid (giá khởi điểm vài đô mỗi tháng, gồm hàng triệu request) |
| Chứng chỉ cho subdomain nhiều cấp, hoặc muốn tự chọn CA | Advanced Certificate Manager |
| Bộ rule WAF đầy đủ (OWASP), Super Bot Fight Mode với Skip rule, nhiều rule hơn | Gói Pro |
| Regex trong rule, Custom SSL upload, SLA | Gói Business |
| Tối ưu ảnh tự động (Polish, Mirage) và biến đổi ảnh | Gói Pro hoặc dịch vụ Images |
| Nhiều origin, health check, failover tự động | Load Balancing |
| Định tuyến thông minh giữa PoP và origin ở xa | Argo Smart Routing |
Quy tắc: mua theo tính năng thiếu, không mua vì “Pro nghe an toàn hơn”. Nếu bạn không nêu được tính năng cụ thể mình đang bị chặn, gói Free đang làm đúng việc của nó.
Đối chiếu với AWS
Nếu bạn đã biết AWS, bảng này giúp chuyển kiến thức sang Cloudflare rất nhanh. Nếu chưa biết AWS, bỏ qua mục này cũng được — hoặc đọc để biết mình sẽ gặp gì ở series AWS.
Bảng tương đương khái niệm
| AWS | Cloudflare | Ghi chú |
|---|---|---|
| Route 53 Hosted Zone | Zone (site) | Cloudflare miễn phí; Route 53 tính phí theo zone và theo số truy vấn. |
| Route 53 ALIAS record | CNAME + CNAME Flattening | Cùng giải quyết bài toán CNAME ở tên miền gốc. |
| CloudFront Distribution | Zone đang bật proxy | Cloudflare không có khái niệm “distribution” riêng — proxy bật theo từng bản ghi DNS (đám mây cam). |
| CloudFront Behavior | Cache Rules + Redirect/Transform Rules | Cloudflare tách thành nhiều loại rule chuyên biệt thay vì một behavior gom tất cả. |
| CloudFront Functions | Cloudflare Workers | Workers mạnh hơn nhiều: gọi mạng được, có KV, có D1. |
| Lambda@Edge | Cloudflare Workers | Workers khởi động nhanh hơn đáng kể (isolate thay vì container). |
| ACM Certificate | Universal SSL | Cả hai miễn phí, tự gia hạn. Cloudflare không bắt chọn region (ACM cho CloudFront phải ở us-east-1). |
| Origin Access Control (OAC) | Authenticated Origin Pulls / chặn IP bằng tường lửa | Cùng mục đích: chỉ CDN được gọi origin. |
| S3 + CloudFront (host tĩnh) | Cloudflare Pages | Pages đơn giản hơn nhiều: không phải cấu hình bucket, OAC, behavior, invalidation. |
| S3 (lưu trữ) | R2 | R2 tương thích API S3 và không tính phí truyền dữ liệu ra. |
| AWS WAF | Cloudflare WAF | Cloudflare có bản miễn phí cơ bản; AWS WAF tính phí theo web ACL, rule và request. |
| CloudFront Invalidation | Purge Cache | Cloudflare purge miễn phí, không giới hạn số lần; CloudFront có hạn mức miễn phí rồi tính phí theo đường dẫn. |
| ALB | Load Balancing (trả phí) hoặc Worker tự định tuyến | Không tương đương hoàn toàn: ALB là L7 load balancer trong VPC, Cloudflare Load Balancing điều phối giữa các origin công khai. |
| Cognito | Cloudflare Access (Zero Trust) | Khác mô hình: Access thiên về bảo vệ ứng dụng nội bộ trước khi request tới app; Cognito là user pool cho app của bạn. |
| CloudWatch (metrics) | Analytics, Web Analytics, Workers Metrics | Cloudflare cho sẵn ở gói Free nhưng nông hơn; log thô cần gói cao hơn. |
| IAM user / access key cho CI | API Token giới hạn quyền | Cùng nguyên tắc: quyền tối thiểu, có hạn, lưu trong CI secrets. |
Cùng một request, hai lối đi
AWS
Người dùng → Route 53 (DNS) → CloudFront (edge location, behavior, cache)
→ S3 (file tĩnh) hoặc ALB → ECS/EC2/Lambda (API)
Cloudflare
Người dùng → Cloudflare DNS → Cloudflare edge (rules, WAF, Workers, cache)
→ Pages (file tĩnh) hoặc origin bất kỳ (Hostinger, VPS, ALB…)
Bốn khác biệt về tư duy đáng ghi nhớ khi chuyển qua lại:
- Bật proxy theo bản ghi, không theo distribution. Ở AWS bạn tạo một distribution rồi trỏ DNS vào nó; ở Cloudflare bạn bấm đám mây cam trên bản ghi. Muốn hai subdomain có “distribution” khác nhau thì chỉ cần hai bản ghi cam với rule khác nhau theo
http.host. - Behavior tách thành rule chuyên biệt. Một behavior CloudFront gom path pattern, cache policy, origin, function association. Cloudflare tách thành Cache Rule (cache gì, bao lâu), Redirect/Transform Rule (đổi URL, đổi header), Worker (logic), WAF (chặn). Mỗi loại có thứ tự thực thi riêng — sơ đồ ở Phần 7.
- Cache mặc định ngược nhau. CloudFront cache theo cache policy bạn khai báo cho từng behavior; Cloudflare mặc định cache theo phần mở rộng file và không cache HTML, nên SPA chạy đúng mà chưa cấu hình gì. Cả hai đều đọc
Cache-Controltừ origin; chiến lược asset-có-hash và HTMLno-cachegiống hệt nhau (Phần 6 bên này, AWS phần 7 bên kia). - Không có region. Không phải chọn
us-east-1cho chứng chỉ, không phải nghĩ bucket ở đâu; mọi thứ của Cloudflare là toàn cầu theo mặc định. Đổi lại, bạn cũng không “đặt” dữ liệu ở một vùng cụ thể được như với S3.
Nếu bạn muốn hiểu phía CloudFront sâu bằng phía Cloudflare, AWS phần 6 đi vào behavior và cache key — đọc xong bạn sẽ thấy Cache Rules của Cloudflare chính là cache key và TTL viết theo cách khác.
Khi nào chọn cái nào
| Tình huống | Nên chọn |
|---|---|
| Dự án cá nhân, startup nhỏ, frontend tĩnh | Cloudflare. Miễn phí, dựng trong 30 phút, không lo hoá đơn. |
| Đã dùng AWS cho backend, database, hàng đợi | AWS. Giữ mọi thứ một chỗ, quyền hạn (IAM) và mạng nội bộ (VPC) thống nhất. |
| Cần băng thông rất lớn (video, file tải về) | Cloudflare. Băng thông không giới hạn qua proxy và R2 không tính phí egress là lợi thế lớn về chi phí; nhớ điều khoản về video ở trên và dùng R2/Stream cho đúng loại nội dung. |
| Cần tích hợp sâu với dịch vụ AWS khác (Cognito, SQS, EventBridge) | AWS. |
| Cần quản lý DNS + bảo vệ cho hosting truyền thống (Hostinger, VPS) | Cloudflare. Đây đúng là bài toán nó sinh ra để giải. |
| Dùng cả hai | Hoàn toàn hợp lý: Cloudflare làm DNS (đám mây xám) + AWS làm hạ tầng. Rất nhiều công ty làm vậy. Chỉ đừng chồng Cloudflare proxy lên CloudFront — hai lớp cache, hai chỗ purge, khó debug gấp đôi, như Phần 4 đã bàn. |
Ước tính chi phí cho một SPA điển hình
Giả sử một SPA với 50 GB truyền tải mỗi tháng, một tên miền, vài triệu request. Giá dưới đây là tham khảo tại thời điểm viết; hãy tự tính lại bằng bảng giá hiện tại của hai bên.
| Hạng mục | Cloudflare (Free + Pages) | AWS (S3 + CloudFront + Route 53) |
|---|---|---|
| DNS | 0 | Route 53 tính phí cố định mỗi hosted zone mỗi tháng (cỡ nửa đô) cộng phí truy vấn |
| CDN và băng thông | 0 | Nằm trong hạn mức miễn phí của CloudFront (cỡ 1 TB mỗi tháng), vượt thì tính theo GB |
| Lưu trữ file build | 0 | S3: vài xu cho vài trăm MB |
| Chứng chỉ | 0 | 0 (ACM) |
| WAF cơ bản | 0 | AWS WAF tính phí theo web ACL, rule và request; bật là có hoá đơn |
| Chuyển hướng www, security header | 0 (rule) | CloudFront Functions: tính theo triệu lần gọi, có hạn mức miễn phí |
| Purge sau deploy | 0 | Hạn mức miễn phí rồi tính theo đường dẫn |
Kết luận không phải “AWS đắt”: với dung lượng này AWS cũng chỉ vài đô. Khác biệt là số thứ phải cấu hình đúng để đạt cùng kết quả: một dự án Pages với _redirects và _headers so với bucket + OAC + distribution + behavior + cache policy + function + invalidation trong pipeline. Nếu team bạn đã có người lo AWS thì khác biệt đó biến mất; nếu chỉ có bạn, nó là vài buổi tối.
Thực hành — kiểm kê zone của bạn (30 phút)
- Vào từng mục rule (Cache, Redirect, Transform, WAF Custom, Rate limiting), ghi lại bộ đếm “đã dùng / tối đa”. Rule nào có thể gộp bằng
or? - Mở Workers & Pages → Metrics: số request mỗi ngày của Worker và Functions đang ở bao nhiêu phần trăm của 100.000? Số build Pages tháng này là bao nhiêu trên 500?
- Liệt kê mọi endpoint nhận upload trong app của bạn và kích thước file lớn nhất người dùng có thể gửi. Endpoint nào có nguy cơ chạm 100 MB? Phác thảo luồng presigned URL cho nó.
- Liệt kê mọi request có thể chạy quá 30 giây. Cái nào cần chuyển sang mô hình job + polling để không bao giờ gặp 524?
- Vẽ lại kiến trúc hiện tại của bạn bằng cột AWS trong bảng tương đương: mỗi hộp Cloudflare tương ứng dịch vụ AWS nào? Bài tập ngược cũng đáng làm nếu bạn đang dùng AWS.
- Nếu có subdomain nhiều cấp (
api.staging.example.com), kiểm tra bằngcurl -sIxem chứng chỉ có hợp lệ không; nếu không, quyết định đổi cấu trúc hay mua Advanced Certificate.
Kết quả mong đợi: bạn có một bảng nhỏ ghi rõ dự án đang dùng bao nhiêu phần trăm mỗi giới hạn của gói Free, biết chính xác tính năng nào (nếu có) đang bị chặn bởi gói, và nói được với đồng nghiệp quen AWS “Cache Rule của tôi tương đương behavior của anh” mà không cần mở docs.
Tóm tắt
- Gói Free cho không giới hạn zone, băng thông proxy, chống DDoS, Universal SSL, Pages, Web Analytics, Email Routing, Turnstile; Workers 100.000 request mỗi ngày; số rule mỗi loại có trần nhưng dashboard hiện bộ đếm.
- Bốn bức tường cứng: upload khoảng 100 MB qua proxy, origin phải trả lời trong khoảng 100–125 giây, chỉ một tập cổng web được proxy, Universal SSL chỉ phủ một cấp wildcard. Regex trong rule cần Business.
- Lách hợp lệ: presigned URL cho upload thẳng lên R2/S3; job + polling cho tác vụ dài; nginx nghe 443 trước app ở cổng lạ.
- Mua theo tính năng thiếu (Workers Paid, Advanced Certificate, Pro cho WAF đầy đủ), không mua vì cảm giác an toàn.
- AWS ↔ Cloudflare: Route 53 ↔ Zone, CloudFront distribution ↔ bản ghi cam, behavior ↔ Cache/Redirect/Transform Rules, CloudFront Functions và Lambda@Edge ↔ Workers, S3 + CloudFront ↔ Pages, S3 ↔ R2, ACM ↔ Universal SSL, OAC ↔ Authenticated Origin Pulls, invalidation ↔ purge.
- Chọn Cloudflare cho dự án nhỏ, frontend tĩnh, băng thông lớn, hosting truyền thống; chọn AWS khi backend đã ở đó; dùng cả hai với Cloudflare làm DNS đám mây xám, nhưng đừng chồng proxy lên CloudFront.
Đọc thêm
- Cloudflare Workers docs — giới hạn và pricing của Workers
- Cloudflare Pages docs — giới hạn build và deploy
- Amazon CloudFront Developer Guide — để đối chiếu behavior, cache policy, invalidation
- Amazon Route 53 Developer Guide — hosted zone và ALIAS record