把带宽费打下来:Cloudflare 降本实战与常用命令合集
Cloudflare 如何降低成本|附完整命令
在网站、API、对象存储、图片分发和内网服务暴露等场景中,流量费用、服务器带宽费用、存储外网出口费用、DDoS 防护费用、证书维护成本以及运维人力成本,往往是长期支出的大头。Cloudflare 的价值不仅仅是“给网站套一层 CDN”,更重要的是通过全球边缘网络、缓存、安全防护、无公网暴露访问、对象存储和边缘计算,把原本需要在云厂商侧付费购买的能力,转移到更低成本甚至免费的 Cloudflare 生态中。
本文将从实际落地角度,介绍如何利用 Cloudflare 降低成本,并附上常用完整命令,适合个人站长、中小企业、SaaS 服务、独立开发者以及需要优化云成本的技术团队参考。
一、Cloudflare 能降低哪些成本?
在使用 Cloudflare 之前,很多网站或应用的架构可能是这样的:
用户 -> 云服务器公网 IP -> Nginx/Apache -> 应用服务 -> 数据库/对象存储
这种架构简单直接,但会产生不少隐性成本:
-
服务器带宽费用高
用户所有访问都直接打到源站,静态资源、图片、JS、CSS、下载文件都会消耗源站带宽。 -
源站性能压力大
即使是重复访问的静态页面,也需要源站反复响应,CPU、内存、磁盘 IO 都会增加。 -
DDoS 和恶意请求防护成本高
如果直接暴露源站 IP,遇到攻击就需要购买高防服务,费用通常不低。 -
对象存储外网出口费高
许多云对象存储本身便宜,但外网流量费用昂贵。 -
证书和 HTTPS 运维成本
多域名、多环境证书管理容易出错,也增加维护成本。 -
内网服务暴露成本
如果为了访问内网管理后台而购买公网 IP、VPN 或堡垒机,也是一笔费用。
Cloudflare 可以通过以下方式降低这些成本:
| 成本类型 | Cloudflare 优化方式 |
|---|---|
| 带宽成本 | CDN 缓存、Cache Rules、Page Rules |
| 源站成本 | 静态资源边缘缓存、HTML 缓存、Workers 处理 |
| 安全成本 | 免费 DDoS 防护、WAF、防火墙规则 |
| 存储出口成本 | R2 对象存储、无出口流量费 |
| 证书成本 | Universal SSL、Full Strict HTTPS |
| 运维成本 | Zero Trust、Tunnel、自动化部署 |
| 计算成本 | Workers、Pages 替代部分服务器 |
二、第一步:接入 Cloudflare DNS,隐藏源站 IP
Cloudflare 降本的前提是让流量先经过 Cloudflare,再转发到源站。最基础的做法是把域名托管到 Cloudflare DNS。
1. 添加域名
登录 Cloudflare 控制台,添加你的域名,例如:
example.com
Cloudflare 会扫描现有 DNS 记录,然后要求你到域名注册商处修改 NS 服务器。
例如 Cloudflare 分配给你的 NS 是:
alice.ns.cloudflare.com
bob.ns.cloudflare.com
你需要在域名注册商后台把原来的 NS 修改为这两个。
三、配置 DNS 代理,减少源站暴露风险
如果你的网站源站 IP 是:
203.0.113.10
可以添加如下 DNS 记录:
| 类型 | 名称 | 内容 | 代理状态 |
|---|---|---|---|
| A | @ | 203.0.113.10 | 已代理 |
| A | www | 203.0.113.10 | 已代理 |
在 Cloudflare 控制台中,“已代理”通常显示为橙色云朵。
如果你使用 API 添加 DNS 记录,可以使用以下命令。
1. 准备环境变量
export CF_API_TOKEN="你的_Cloudflare_API_Token"
export CF_ZONE_ID="你的_Zone_ID"
export CF_DOMAIN="example.com"
export ORIGIN_IP="203.0.113.10"
2. 添加根域名 A 记录
curl -X POST "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{
"type": "A",
"name": "'"${CF_DOMAIN}"'",
"content": "'"${ORIGIN_IP}"'",
"ttl": 1,
"proxied": true
}'
3. 添加 www 记录
curl -X POST "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{
"type": "A",
"name": "www",
"content": "'"${ORIGIN_IP}"'",
"ttl": 1,
"proxied": true
}'
这样用户访问你的网站时,会先访问 Cloudflare 边缘节点,再由 Cloudflare 回源到你的服务器。
四、开启 HTTPS,降低证书维护成本
Cloudflare 提供 Universal SSL,可以免费为域名签发边缘证书。建议源站也配置 HTTPS,并将 SSL 模式设置为:
Full (strict)
这样 Cloudflare 到源站之间也是加密的,并且会校验证书有效性。
1. 使用 Cloudflare Origin CA 生成源站证书
Cloudflare 控制台可以生成 Origin Certificate,你也可以使用本地 OpenSSL 生成 CSR。
生成私钥:
openssl genrsa -out origin.key 2048
生成 CSR:
openssl req -new -key origin.key -out origin.csr \
-subj "/C=CN/ST=Beijing/L=Beijing/O=Example/OU=IT/CN=example.com"
将 origin.csr 内容提交到 Cloudflare Origin CA 后,下载证书,例如保存为:
origin.pem
2. Nginx 配置 HTTPS
sudo mkdir -p /etc/nginx/ssl/example.com
sudo cp origin.pem /etc/nginx/ssl/example.com/origin.pem
sudo cp origin.key /etc/nginx/ssl/example.com/origin.key
sudo chmod 600 /etc/nginx/ssl/example.com/origin.key
创建 Nginx 配置:
sudo tee /etc/nginx/conf.d/example.com.conf > /dev/null <<'EOF'
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com/origin.pem;
ssl_certificate_key /etc/nginx/ssl/example.com/origin.key;
root /var/www/example.com;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
EOF
检查并重载 Nginx:
sudo nginx -t
sudo systemctl reload nginx
通过 Cloudflare 托管证书和 Origin CA,可以大幅减少证书续期、部署和多域名证书管理带来的运维成本。
五、使用缓存降低源站带宽和计算成本
Cloudflare 最大的降本能力之一,就是缓存。静态资源一旦被边缘节点缓存,后续用户访问就不再打到源站。
1. 为静态资源设置长期缓存
在 Nginx 中为图片、CSS、JS、字体设置缓存头:
sudo tee /etc/nginx/conf.d/cache-static.conf > /dev/null <<'EOF'
location ~* \.(?:css|js|jpg|jpeg|gif|png|webp|svg|ico|woff|woff2|ttf|eot)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000, immutable";
access_log off;
}
EOF
如果该配置需要放入已有 server 块中,请不要直接作为独立文件使用,而是复制到对应站点配置的 server 内部。
重新加载 Nginx:
sudo nginx -t
sudo systemctl reload nginx
2. 使用 Cloudflare Cache Rules 缓存静态资源
可以在 Cloudflare 控制台创建 Cache Rule:
条件:
URI Path ends with .css
OR URI Path ends with .js
OR URI Path ends with .png
OR URI Path ends with .jpg
OR URI Path ends with .webp
动作:
Cache eligibility: Eligible for cache
Edge TTL: 1 month
Browser TTL: 1 month
如果你希望通过 API 创建规则,可以使用 Rulesets API。以下示例为静态资源设置缓存策略:
curl -X POST "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/rulesets" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{
"name": "Cache static assets",
"description": "Cache static files to reduce origin bandwidth",
"kind": "zone",
"phase": "http_request_cache_settings",
"rules": [
{
"action": "set_cache_settings",
"expression": "(http.request.uri.path matches \"^.*\\.(css|js|jpg|jpeg|png|gif|webp|svg|ico|woff|woff2)$\")",
"action_parameters": {
"cache": true,
"edge_ttl": {
"mode": "override_origin",
"default": 2592000
},
"browser_ttl": {
"mode": "override_origin",
"default": 2592000
}
},
"description": "Cache static files for 30 days",
"enabled": true
}
]
}'
注意:不同账号套餐和 API 版本可能对 Rulesets API 支持略有差异。如果命令返回权限错误,需要检查 API Token 权限和当前套餐能力。
六、缓存 HTML 页面,显著降低服务器成本
如果你的网站是博客、文档站、企业官网、营销页,HTML 页面变化不频繁,可以考虑缓存 HTML。这样 Cloudflare 可以直接返回页面,源站压力会明显下降。
1. 适合缓存 HTML 的场景
适合:
- 静态博客
- 文档站
- 企业官网
- 新闻详情页
- 商品详情页中的非登录态页面
- Landing Page
不适合直接缓存:
- 用户中心
- 购物车
- 支付页面
- 后台管理系统
- 带有个性化推荐的页面
2. Nginx 增加 HTML 缓存头
sudo tee /etc/nginx/conf.d/example-html-cache.conf > /dev/null <<'EOF'
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ /index.html;
add_header Cache-Control "public, max-age=300, s-maxage=3600";
}
}
EOF
含义如下:
max-age=300:浏览器缓存 5 分钟
s-maxage=3600:共享缓存,也就是 CDN 缓存 1 小时
3. 清理 Cloudflare 缓存
当你更新页面后,可以手动清理缓存。
清理整个站点缓存:
curl -X POST "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/purge_cache" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{"purge_everything":true}'
清理指定 URL:
curl -X POST "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/purge_cache" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{
"files": [
"https://example.com/",
"https://example.com/about",
"https://example.com/assets/app.css"
]
}'
把缓存清理集成到部署脚本中:
#!/usr/bin/env bash
set -e
export CF_API_TOKEN="你的_Cloudflare_API_Token"
export CF_ZONE_ID="你的_Zone_ID"
echo "开始部署..."
rsync -avz --delete ./dist/ user@203.0.113.10:/var/www/example.com/
echo "清理 Cloudflare 缓存..."
curl -X POST "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/purge_cache" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{"purge_everything":true}'
echo "部署完成"
七、用 Cloudflare R2 替代传统对象存储,降低出口费用
很多云厂商对象存储的存储价格并不高,但外网下载流量费用很高。如果图片、附件、安装包或静态资源访问量大,出口费用会迅速增加。
Cloudflare R2 的核心优势是:
没有出口流量费
这对下载站、图片站、文档附件、前端静态资源分发都非常有价值。
八、安装 Wrangler,管理 R2 和 Workers
Wrangler 是 Cloudflare 官方 CLI 工具。
1. 安装 Node.js
Ubuntu/Debian 安装 Node.js:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
查看版本:
node -v
npm -v
2. 安装 Wrangler
npm install -g wrangler
登录 Cloudflare:
wrangler login
验证登录状态:
wrangler whoami
九、创建 R2 存储桶并上传文件
1. 创建 R2 Bucket
wrangler r2 bucket create example-assets
查看 Bucket 列表:
wrangler r2 bucket list
2. 上传单个文件
wrangler r2 object put example-assets/logo.png --file ./logo.png
3. 上传前端构建产物
假设你的静态资源在 dist/assets 目录:
find ./dist/assets -type f | while read file; do
key="${file#./dist/assets/}"
wrangler r2 object put "example-assets/${key}" --file "$file"
done
4. 下载文件测试
wrangler r2 object get example-assets/logo.png --file ./download-logo.png
5. 删除文件
wrangler r2 object delete example-assets/logo.png
十、用 R2 自定义域名分发静态资源
你可以把 R2 绑定到自定义域名,例如:
assets.example.com
然后把图片、CSS、JS 等资源 URL 改成:
https://assets.example.com/logo.png
这样可以减少源站服务器静态资源压力,并降低云存储出口费用。
建议对资源文件使用带 hash 的文件名,例如:
app.8f3a1c2.js
style.7b9d4e1.css
logo.20250101.png
这样可以放心设置长期缓存。
十一、使用 Cloudflare Pages 托管静态网站,减少服务器费用
如果你的网站是静态博客、React/Vue 前端项目、文档站,可以直接部署到 Cloudflare Pages,甚至不需要购买云服务器。
1. 创建前端项目示例
以 Vite 为例:
npm create vite@latest my-site -- --template vue
cd my-site
npm install
npm run build
构建产物位于:
dist
2. 使用 Wrangler 部署到 Pages
wrangler pages project create my-site
部署:
wrangler pages deploy dist --project-name=my-site
部署完成后,Cloudflare 会返回一个访问地址,例如:
https://my-site.pages.dev
你也可以绑定自定义域名:
www.example.com
对于纯静态站点,Cloudflare Pages 可以直接替代云服务器,节省 VPS、系统维护、安全补丁、Nginx 配置等成本。
十二、使用 Cloudflare Tunnel,减少公网 IP 和安全防护成本
很多内部系统并不需要直接暴露公网 IP,例如:
- Grafana
- Prometheus
- Jenkins
- GitLab
- 内部 CRM
- 数据库管理工具
- 运维后台
传统做法通常需要公网 IP、VPN、堡垒机或防火墙策略。Cloudflare Tunnel 可以让内网服务通过加密隧道接入 Cloudflare,不暴露源站 IP。
十三、安装 cloudflared
1. Ubuntu/Debian 安装
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb \
-o cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
cloudflared --version
2. CentOS/RHEL 安装
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm \
-o cloudflared-linux-x86_64.rpm
sudo rpm -ivh cloudflared-linux-x86_64.rpm
cloudflared --version
3. macOS 安装
brew install cloudflared
cloudflared --version
十四、创建 Tunnel 并暴露内网服务
假设本机有一个内部服务运行在:
http://localhost:3000
希望通过以下域名访问:
app.example.com
1. 登录 Cloudflare
cloudflared tunnel login
浏览器会打开授权页面,选择你的域名完成授权。
2. 创建 Tunnel
cloudflared tunnel create app-tunnel
查看 Tunnel 列表:
cloudflared tunnel list
3. 创建配置目录
mkdir -p ~/.cloudflared
4. 编写配置文件
将下面的 TUNNEL_ID 替换为你实际的 Tunnel ID。
tee ~/.cloudflared/config.yml > /dev/null <<'EOF'
tunnel: TUNNEL_ID
credentials-file: /home/ubuntu/.cloudflared/TUNNEL_ID.json
ingress:
- hostname: app.example.com
service: http://localhost:3000
- service: http_status:404
EOF
如果你的用户名不是 ubuntu,需要调整路径。可以使用以下命令查看当前用户目录:
echo $HOME
5. 创建 DNS 路由
cloudflared tunnel route dns app-tunnel app.example.com
6. 启动 Tunnel
cloudflared tunnel run app-tunnel
7. 安装为系统服务
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
sudo systemctl status cloudflared
这样,源站无需公网 IP,用户请求会通过 Cloudflare 安全访问你的内网服务。
十五、为后台系统加 Zero Trust 访问控制
如果你把管理后台暴露到公网,即使有密码,也可能被爆破。Cloudflare Zero Trust 可以在访问后台前增加身份验证,例如只允许公司邮箱、GitHub、Google Workspace 用户访问。
可以保护的路径包括:
https://admin.example.com
https://grafana.example.com
https://jenkins.example.com
推荐策略:
只允许指定邮箱访问
只允许指定域名邮箱访问
要求一次性验证码
启用多因素认证
这样可以减少购买 VPN、堡垒机和额外安全产品的成本。
十六、使用 WAF 和防火墙规则减少恶意流量成本
恶意爬虫、扫描器、爆破请求会消耗服务器资源。如果源站直接承受这些请求,就会增加 CPU、内存、日志和带宽成本。
Cloudflare 可以在边缘拦截这些请求。
1. 拦截敏感路径
例如不允许访问 WordPress 常见攻击路径:
/wp-login.php
/xmlrpc.php
/.env
/.git
使用 Cloudflare WAF Custom Rules,可以设置表达式:
(http.request.uri.path contains "/.env") or
(http.request.uri.path contains "/.git") or
(http.request.uri.path eq "/xmlrpc.php")
动作:
Block
2. 对后台路径启用 Challenge
例如后台路径:
/admin
/login
规则表达式:
(http.request.uri.path starts_with "/admin") or
(http.request.uri.path starts_with "/login")
动作:
Managed Challenge
这可以有效降低爆破请求对源站的压力。
十七、使用 Workers 替代轻量后端逻辑
Cloudflare Workers 可以在边缘运行 JavaScript/TypeScript。对于一些简单接口,没必要单独部署服务器。
适合放到 Workers 的逻辑:
- URL 跳转
- A/B 测试
- 简单 API 聚合
- Header 重写
- 访问控制
- 静态 JSON 接口
- 图片地址签名验证
- 简单 Webhook
1. 创建 Worker 项目
mkdir cf-worker-demo
cd cf-worker-demo
npm init -y
npm install -D wrangler
创建 wrangler.toml:
tee wrangler.toml > /dev/null <<'EOF'
name = "cf-worker-demo"
main = "src/index.js"
compatibility_date = "2025-01-01"
EOF
创建代码目录:
mkdir -p src
创建 src/index.js:
tee src/index.js > /dev/null <<'EOF'
export default {
async fetch(request, env, ctx) {
const url = new URL(request.url);
if (url.pathname === "/api/health") {
return Response.json({
status: "ok",
edge: "cloudflare",
time: new Date().toISOString()
});
}
if (url.pathname === "/old") {
return Response.redirect("https://example.com/new", 301);
}
return new Response("Hello from Cloudflare Workers", {
headers: {
"content-type": "text/plain;charset=UTF-8"
}
});
}
};
EOF
本地调试:
npx wrangler dev
部署:
npx wrangler deploy
通过 Workers 替代简单服务,可以减少一台轻量服务器的成本,也减少系统补丁、运行环境维护和故障处理工作。
十八、启用压缩和图片优化,降低流量成本
Cloudflare 支持 Brotli 压缩,可以减少文本资源体积,例如 HTML、CSS、JS、JSON。
建议开启:
Speed -> Optimization -> Brotli
Nginx 也可以开启 gzip:
sudo tee /etc/nginx/conf.d/gzip.conf > /dev/null <<'EOF'
gzip on;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_types
text/plain
text/css
application/json
application/javascript
application/xml
image/svg+xml;
EOF
sudo nginx -t
sudo systemctl reload nginx
对于图片,建议:
- 使用 WebP 或 AVIF。
- 图片文件名带版本号或 hash。
- 通过 Cloudflare 缓存长时间分发。
- 大图生成缩略图,避免原图直接输出。
批量转换 JPG/PNG 到 WebP:
sudo apt-get update
sudo apt-get install -y webp
find ./images -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | while read img; do
cwebp -q 80 "$img" -o "${img%.*}.webp"
done
十九、降低回源成本的关键配置建议
为了真正降低成本,不只是“接入 Cloudflare”,还需要让缓存命中率提高。
1. 使用版本化静态资源
不推荐:
/app.js
/style.css
推荐:
/app.4fd9c1.js
/style.a82bc3.css
这样可以设置长期缓存:
Cache-Control: public, max-age=31536000, immutable
2. 减少 Cookie 对缓存的影响
很多站点会给所有请求都带 Cookie,导致缓存效果变差。建议:
- 静态资源使用独立域名,如
assets.example.com - 静态资源域名不要设置 Cookie
- 登录态页面和公共页面分开
3. 避免频繁清理全站缓存
全站清理会导致缓存全部失效,短时间内大量请求回源,反而增加服务器压力。更推荐:
curl -X POST "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/purge_cache" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{
"files": [
"https://example.com/index.html",
"https://example.com/assets/app.4fd9c1.js"
]
}'
4. 给 API 设置合理缓存
不是所有 API 都不能缓存。例如:
GET /api/articles
GET /api/products
GET /api/config
可以设置短缓存:
Cache-Control: public, max-age=30, s-maxage=120
这样高并发访问时,可以显著降低后端数据库压力。
二十、成本优化参考方案
方案一:个人博客或文档站
推荐架构:
Cloudflare Pages + Cloudflare DNS + Cloudflare Cache
可节省:
- VPS 费用
- Nginx 运维成本
- HTTPS 证书维护成本
- 大部分带宽成本
部署命令:
npm run build
wrangler pages deploy dist --project-name=my-blog
方案二:企业官网
推荐架构:
Cloudflare CDN + 缓存 HTML + 静态资源长期缓存 + WAF
可节省:
- 源站带宽
- 云服务器配置
- 防护产品费用
- 恶意流量带来的资源浪费
清缓存命令:
curl -X POST "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/purge_cache" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data '{"purge_everything":true}'
方案三:图片或下载资源较多的网站
推荐架构:
Cloudflare R2 + 自定义域名 + CDN 缓存
可节省:
- 对象存储外网出口费
- 服务器磁盘空间
- 源站下载带宽
上传命令:
wrangler r2 bucket create example-assets
wrangler r2 object put example-assets/file.zip --file ./file.zip
方案四:内部系统安全访问
推荐架构:
Cloudflare Tunnel + Zero Trust
可节省:
- 公网 IP
- VPN
- 堡垒机
- 部分安全防护成本
核心命令:
cloudflared tunnel login
cloudflared tunnel create internal-tunnel
cloudflared tunnel route dns internal-tunnel admin.example.com
cloudflared tunnel run internal-tunnel
二十一、如何衡量是否真的降本?
接入 Cloudflare 后,建议持续观察以下指标:
-
缓存命中率 Cache Hit Ratio
命中率越高,源站带宽和计算压力越低。 -
源站带宽变化
对比接入前后服务器公网出流量。 -
源站 CPU 和内存变化
如果 HTML 和静态资源大量命中缓存,CPU 应明显下降。 -
对象存储账单变化
如果使用 R2 替代传统对象存储,重点关注出口费用变化。 -
安全事件数量
查看 WAF、Bot、Challenge、Blocked 请求数量。 -
可用性和响应时间
Cloudflare 边缘缓存通常会降低全球用户访问延迟。
可以在 Linux 服务器上查看 Nginx 访问量变化:
sudo tail -f /var/log/nginx/access.log
统计状态码:
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
统计访问最多的 URL:
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
查看服务器实时带宽:
sudo apt-get install -y iftop
sudo iftop
查看系统资源:
top
或:
htop
安装 htop:
sudo apt-get install -y htop
二十二、常见误区
1. 只接入 DNS,不开启代理
如果 DNS 记录是灰色云朵,流量不会经过 Cloudflare,也就无法享受 CDN、防护和缓存。
2. 所有页面都缓存
登录页、用户中心、订单页等个性化页面不能随意缓存,否则可能出现隐私和数据错乱问题。
3. 频繁全站 Purge
频繁清理全站缓存会导致缓存命中率下降,源站压力增大。应优先清理指定 URL。
4. 源站 IP 仍然暴露
如果历史 DNS 记录、邮件记录、子域名或代码仓库中泄露了源站 IP,攻击者仍可能绕过 Cloudflare。建议源站防火墙只允许 Cloudflare IP 回源。
5. 忽视缓存头
Cloudflare 能否高效缓存,很大程度上取决于源站返回的 Cache-Control。没有合理缓存头,缓存效果会大打折扣。
二十三、限制源站只允许 Cloudflare 回源
为了避免攻击者绕过 Cloudflare 直接访问源站,可以在源站防火墙中只允许 Cloudflare IP。
Cloudflare 官方 IP 列表地址:
https://www.cloudflare.com/ips-v4
https://www.cloudflare.com/ips-v6
Ubuntu 使用 ufw 的示例:
sudo apt-get update
sudo apt-get install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
for ip in $(curl -s https://www.cloudflare.com/ips-v4); do
sudo ufw allow from $ip to any port 80 proto tcp
sudo ufw allow from $ip to any port 443 proto tcp
done
for ip in $(curl -s https://www.cloudflare.com/ips-v6); do
sudo ufw allow from $ip to any port 80 proto tcp
sudo ufw allow from $ip to any port 443 proto tcp
done
sudo ufw allow ssh
sudo ufw enable
sudo ufw status
如果你的 SSH 端口不是默认 22,例如是 2222:
sudo ufw allow 2222/tcp
注意:执行防火墙命令前,请务必确认 SSH 访问不会被误封,最好保留云厂商控制台救援入口。
二十四、总结
Cloudflare 降低成本的核心逻辑可以概括为一句话:
把能在边缘完成的事情放到 Cloudflare,把不该暴露公网的服务藏到 Tunnel,把高出口费用的对象存储迁移到 R2。
实际落地时,可以按以下顺序进行:
- 接入 Cloudflare DNS,并开启代理。
- 开启 HTTPS,使用 Full Strict。
- 配置静态资源长期缓存。
- 对适合的 HTML 页面启用边缘缓存。
- 用 R2 承载图片、附件、下载文件。
- 用 Pages 托管静态网站,减少服务器。
- 用 Tunnel 和 Zero Trust 保护内部系统。
- 用 WAF 拦截恶意请求。
- 用 Workers 替代轻量后端逻辑。
- 持续观察缓存命中率和源站带宽变化。
对于个人开发者,Cloudflare 可以帮你少买一台服务器;对于企业官网,Cloudflare 可以显著降低带宽和防护成本;对于高流量资源站,R2 的无出口流量费优势尤其明显;对于内部系统,Tunnel 和 Zero Trust 则能降低公网暴露和安全运维成本。
只要合理配置缓存、安全和部署流程,Cloudflare 不只是 CDN,而是一套完整的降本增效基础设施。