Website WordPress càng phát triển thì thư viện hình ảnh, video, PDF và các tệp tải lên càng lớn. Nếu tất cả dữ liệu đều được lưu trực tiếp trên hosting, dung lượng server sẽ nhanh chóng tăng lên, thời gian backup lâu hơn và server cũng phải xử lý thêm nhiều request liên quan đến media.
Cloudflare R2 là một giải pháp lưu trữ object storage có thể sử dụng để đưa các tệp media ra khỏi hosting WordPress. Nhờ khả năng tương thích với S3 API, R2 có thể kết nối với nhiều plugin WordPress hỗ trợ S3-compatible storage.
Trong bài viết này, chúng ta sẽ tìm hiểu Cloudflare R2 là gì và cách tích hợp R2 với WordPress để lưu trữ, phân phối media.
Cloudflare R2 là gì?
Cloudflare R2 là dịch vụ object storage của Cloudflare, được thiết kế để lưu trữ các loại dữ liệu như hình ảnh, video, PDF, tài liệu và các file tĩnh. R2 còn hỗ trợ S3-compatible API, điều đó có nghĩa là các ứng dụng hoặc plugin WordPress vốn hỗ trợ Amazon S3 có thể sử dụng R2 thông qua endpoint và bộ credentials tương ứng.

Trong một website WordPress, R2 có thể được sử dụng như một kho lưu trữ bên ngoài: WordPress → Plugin Offload Media → Cloudflare R2 → CDN/Custom Domain → Người dùng Thay vì để hosting WordPress trực tiếp lưu và phân phối toàn bộ hình ảnh, video hay tài liệu, các file này được đưa sang R2.
Cloudflare R2 có phù hợp với website WordPress không?
Cloudflare R2 phù hợp với những website có lượng media ngày càng lớn và muốn tách phần lưu trữ khỏi hosting WordPress. Đặc biệt phù hợp với:
- Website tin tức, blog có nhiều hình ảnh.
- Website doanh nghiệp có nhiều tài liệu PDF.
- Website bán hàng có nhiều hình ảnh sản phẩm.
- Website sử dụng nhiều video.
- Website có thư viện media lớn.
- Website muốn giảm dung lượng hosting.
Điểm quan trọng là R2 chỉ giải quyết bài toán lưu trữ và phân phối file. Để website thực sự nhanh, vẫn cần tối ưu hình ảnh, cache, CDN và cấu hình WordPress.
WordPress có thể kết nối Cloudflare R2 như thế nào?
WordPress không cần phải được lập trình lại để sử dụng R2, bạn có thể sử dụng một plugin offload media để thực hiện quá trình này.
Plugin sẽ đóng vai trò trung gian:
- WordPress nhận file upload.
- Plugin gửi file lên Cloudflare R2.
- R2 lưu file trong Bucket.
- Plugin thay đổi URL media để website sử dụng file từ R2.
- Người dùng truy cập file thông qua URL R2 hoặc Custom Domain.

Hiện có nhiều plugin WordPress hỗ trợ Cloudflare R2 và các dịch vụ S3-compatible khác, một số plugin có khả năng tự động upload media mới, migrate thư viện media cũ và rewrite URL media.
Trong bài này, chúng ta sử dụng Webo offload media để minh họa cách triển khai.
Cách tích hợp Cloudflare R2 với WordPress bằng Webo Offload Media
Trước khi bắt đầu, bạn cần chuẩn bị:
- Một tài khoản Cloudflare.
- Đã bật Cloudflare R2.
- Một R2 Bucket.
- R2 Access Key ID.
- R2 Secret Access Key.
- R2 S3 API Endpoint.
- Website WordPress đã cài Webo Offload Media.
Bước 1: Cài đặt plugin Webo Offload Media
Đầu tiên, đăng nhập vào trang quản trị WordPress.
Truy cập: Plugins => Add New Plugin => Sau đó cài đặt và kích hoạt Webo Offload Media. Nếu website của bạn sử dụng hệ thống Webo, plugin có thể được tích hợp sẵn trong hệ thống và bạn không cần thực hiện bước cài đặt thủ công.
Sau khi kích hoạt plugin, bạn có thể truy cập phần cài đặt Offload Media để bắt đầu cấu hình storage.
Bước 2: Tạo Cloudflare R2 Bucket
Đăng nhập vào Cloudflare Dashboard và truy cập khu vực R2 Object Storage => Tạo một Bucket mới, bạn có thể đặt tên Bucket theo website, ví dụ: mywebsite-media – Bucket này sẽ là nơi lưu trữ hình ảnh, PDF, video và các file khác được WordPress upload.
Nên đặt tên Bucket dễ nhận biết nếu bạn quản lý nhiều website hoặc nhiều môi trường khác nhau.
Ví dụ:
website-a-mediawebsite-b-mediawebsite-production-media
Việc tách Bucket theo website giúp việc quản lý và migration sau này dễ dàng hơn.
Bước 3: Tạo API Token cho Cloudflare R2
Để WordPress có thể đọc và ghi dữ liệu vào Bucket, bạn cần tạo credentials cho R2.
Trong Cloudflare Dashboard, vào: R2 => Overview => Manage API Tokens => Sau đó chọn tạo API Token.

Cloudflare hiện hỗ trợ tạo credentials với quyền Object Read & Write và có thể giới hạn quyền truy cập vào những Bucket cụ thể. Đây là cách nên sử dụng thay vì cấp quyền rộng hơn mức cần thiết.
Sau khi tạo token, bạn cần lưu lại:
- Access Key ID
- Secret Access Key: Secret Access Key chỉ được hiển thị khi tạo và cần được lưu lại an toàn.
Ngoài ra, bạn cần lấy S3 API Endpoint của R2.
Endpoint có dạng: https://<ACCOUNT_ID>.r2.cloudflarestorage.com
Trong đó <ACCOUNT_ID> là Account ID của tài khoản Cloudflare.
Bước 4: Kết nối Cloudflare R2 với WordPress
Sau khi đã có Bucket và API credentials, quay lại WordPress, bạn truy cập: Settings => Webo Offload Media. Trong phần Storage, lựa chọn cấu hình Cloudflare R2 hoặc S3-compatible storage.
Nhập các thông tin:
- Access Key ID
- Secret Access Key
- Bucket
- Endpoint
- Region nếu plugin yêu cầu
- Domain phân phối media nếu đã cấu hình
Sau đó lưu cấu hình và thực hiện kiểm tra kết nối, nếu thông tin chính xác WordPress có thể kết nối tới Bucket và thực hiện thao tác upload file.
Bước 5: Kết nối Webo Offload media lên R2
Sau khi kết nối thành công, bạn có thể bật tính năng tự động offload media. Khi người quản trị upload một hình ảnh mới vào WordPress: WordPress Media Library => Webo Offload Media => Cloudflare R2 File sẽ được upload lên R2 thay vì chỉ nằm trên hosting.

Đối với những file đã tồn tại trong Media Library, bạn có thể thực hiện migration/offload thư viện media hiện tại sang R2 nếu plugin hỗ trợ chức năng này. Đây là bước quan trọng nếu website đã hoạt động lâu năm, bởi chỉ bật automatic offload sẽ không tự động chuyển toàn bộ file cũ đang nằm trong /wp-content/uploads/.
Những lưu ý khi dùng Cloudflare R2 với WordPress
1. Không chuyển toàn bộ media ngay lập tức nếu website đang có traffic lớn: Nếu website có hàng chục nghìn hoặc hàng trăm nghìn file, quá trình migration nên được thực hiện theo batch.
2. Không xóa file local trước khi kiểm tra: Đây là lỗi dễ gặp nhất khi triển khai offload media, Offload thành công không có nghĩa là bạn có thể xóa ngay /wp-content/uploads/, hãy đảm bảo file trên R2 có thể truy cập bình thường trước khi dọn dữ liệu trên hosting.
3. Access Key và Secret Access Key là thông tin nhạy cảm, nếu plugin hỗ trợ có thể cấu hình credentials thông qua wp-config.php để hạn chế việc lưu thông tin nhạy cảm trực tiếp trong database.
4. Việc chuyển media từ hosting sang R2 không đồng nghĩa với việc website sẽ mất SEO. Điều quan trọng là URL media mới phải hoạt động ổn định và các công cụ tìm kiếm vẫn có thể truy cập file khi cần. Đặc biệt, offload media không thay thế việc tối ưu hình ảnh.
Tích hợp Cloudflare R2 với WordPress là một cách để tách media khỏi hosting, giảm áp lực lưu trữ và giúp website dễ mở rộng hơn khi thư viện hình ảnh, video và tài liệu ngày càng lớn. Đây cũng là hướng tiếp cận phù hợp với những website WordPress muốn chủ động hơn về hạ tầng thay vì để toàn bộ dữ liệu nằm trên cùng một hosting.



