If you’re deciding cloudflare r2 vs s3, the “best” object storage isn’t about brand loyalty—it’s about your VPS hosting bill, egress patterns, and how much operational friction you can tolerate.
What actually matters for VPS hosting workloads
When you run apps on a VPS (think Docker hosts, small Kubernetes clusters, or a single beefy box), object storage usually backs one of these:
- User uploads (images, videos, PDFs)
- Backups/snapshots (database dumps, volume backups)
- Static assets (frontend bundles, avatars)
- Log/event archiving
In practice, three variables dominate cost and pain:
- Egress fees: pulling objects out to your VPS, to users, or to other regions.
- Latency and locality: how close storage is to your compute.
- S3 API compatibility: whether your tools “just work” (rclone, awscli, SDKs, Terraform).
For teams hosting on providers like digitalocean or hetzner, the “object storage choice” can quietly become the biggest recurring line item once traffic grows.
Pricing and egress: the real R2 vs S3 difference
Here’s the blunt take: Cloudflare R2’s headline advantage is egress. S3 is a mature baseline with deep features, but egress can hurt if your workload pulls lots of data out.
Cloudflare R2
- Generally positioned as no/low egress to the public internet (depending on how you serve content).
- Works best when paired with Cloudflare’s network for delivery.
- If your VPS app serves lots of media to users, egress is usually the first lever you want to control.
Amazon S3
- Predictable, battle-tested, but egress is often expensive at scale.
- Great ecosystem support (every tool targets S3 first).
- If your data mostly stays inside AWS (EC2, CloudFront, Lambda), it can be cost-effective and operationally smooth.
Opinionated rule of thumb for VPS hosting:
- If you’re on a VPS outside AWS and you serve lots of bytes to end users, R2 is worth serious consideration.
- If you’re using object storage primarily for backups (write once, read rarely), S3’s egress may not matter much, and its durability/features can be attractive.
API compatibility and day-2 ops: where the dragons are
Both options speak “S3,” but the day-2 experience differs.
S3 compatibility
- S3 is the reference implementation. Edge cases, headers, signing quirks—tools usually assume S3 behavior.
- R2 is intentionally S3-compatible, but you may occasionally hit differences (certain headers, policies, or advanced features). For most common workflows (PUT/GET, presigned URLs, multipart uploads), it’s solid.
Features you might actually need on a VPS
- Lifecycle rules: auto-expire backups or move to cheaper storage classes (S3 is extremely feature-rich here).
- Replication: multi-region replication is mature in S3; with R2, you’ll want to validate your specific resilience needs.
- Event integrations: S3 notifications and AWS-native triggers are hard to beat if you’re inside AWS.
If your VPS stack is intentionally lean—say you run a few services on hetzner and just need cheap, simple object storage—R2’s simplicity can be a benefit. If you’re building a bigger data pipeline with lots of integrations, S3 still wins on ecosystem depth.
Actionable example: use rclone from a VPS to R2 or S3
One practical way to evaluate is to run the same workflow from your VPS against both providers: upload a backup, list it, restore it.
Below is an rclone config approach that works well for VPS backups.
# ~/.config/rclone/rclone.conf
[r2]
type = s3
provider = Cloudflare
access_key_id = YOUR_R2_ACCESS_KEY
secret_access_key = YOUR_R2_SECRET
endpoint = https://<accountid>.r2.cloudflarestorage.com
acl = private
[s3]
type = s3
provider = AWS
access_key_id = YOUR_AWS_ACCESS_KEY
secret_access_key = YOUR_AWS_SECRET
region = us-east-1
Then, from your VPS:
- Upload a nightly DB dump:
rclone copy /backups/db.sql.gz r2:my-bucket/db/ --progressrclone copy /backups/db.sql.gz s3:my-bucket/db/ --progress
- Restore test:
rclone copy r2:my-bucket/db/db.sql.gz /tmp/ --progress
Measure:
- Time to upload/download
- Any auth/signing quirks
- The actual monthly egress based on your restore/download patterns
This is more honest than reading pricing pages.
Which should you choose for VPS hosting? (practical guidance)
If your VPS provider is digitalocean, hetzner, or similar, you’re often optimizing for a clean, predictable bill.
Choose Cloudflare R2 when:
- You serve public downloads/streaming and want to avoid egress surprises.
- You already use cloudflare for DNS/CDN/WAF and want fewer moving parts.
- Your object needs are straightforward: assets + backups + simple lifecycle.
Choose Amazon S3 when:
- You need advanced features (replication options, deep policy tooling, mature eventing).
- Your workload is mostly inside AWS, or you’re already paying for AWS networking.
- You value “every tool supports this perfectly” more than squeezing egress costs.
Soft recommendation (only if it fits your stack): if you’re building a budget-friendly VPS setup and already front everything with Cloudflare, R2 can be a nice way to keep object storage costs boring—in a good way—while S3 remains the default for complex, AWS-centric architectures.
Some links in this article are affiliate links. We may earn a commission at no extra cost to you if you make a purchase through them.












