上一篇 下一篇 分享链接 返回 返回顶部

把带宽费打下来:Cloudflare 降本实战与常用命令合集

发布人:慈云数据-客服中心 发布时间:2小时前 阅读量:3

Cloudflare 如何降低成本|附完整命令

在网站、API、对象存储、图片分发和内网服务暴露等场景中,流量费用、服务器带宽费用、存储外网出口费用、DDoS 防护费用、证书维护成本以及运维人力成本,往往是长期支出的大头。Cloudflare 的价值不仅仅是“给网站套一层 CDN”,更重要的是通过全球边缘网络、缓存、安全防护、无公网暴露访问、对象存储和边缘计算,把原本需要在云厂商侧付费购买的能力,转移到更低成本甚至免费的 Cloudflare 生态中。

本文将从实际落地角度,介绍如何利用 Cloudflare 降低成本,并附上常用完整命令,适合个人站长、中小企业、SaaS 服务、独立开发者以及需要优化云成本的技术团队参考。


一、Cloudflare 能降低哪些成本?

在使用 Cloudflare 之前,很多网站或应用的架构可能是这样的:

用户 -> 云服务器公网 IP -> Nginx/Apache -> 应用服务 -> 数据库/对象存储

这种架构简单直接,但会产生不少隐性成本:

  1. 服务器带宽费用高
    用户所有访问都直接打到源站,静态资源、图片、JS、CSS、下载文件都会消耗源站带宽。

  2. 源站性能压力大
    即使是重复访问的静态页面,也需要源站反复响应,CPU、内存、磁盘 IO 都会增加。

  3. DDoS 和恶意请求防护成本高
    如果直接暴露源站 IP,遇到攻击就需要购买高防服务,费用通常不低。

  4. 对象存储外网出口费高
    许多云对象存储本身便宜,但外网流量费用昂贵。

  5. 证书和 HTTPS 运维成本
    多域名、多环境证书管理容易出错,也增加维护成本。

  6. 内网服务暴露成本
    如果为了访问内网管理后台而购买公网 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

对于图片,建议:

  1. 使用 WebP 或 AVIF。
  2. 图片文件名带版本号或 hash。
  3. 通过 Cloudflare 缓存长时间分发。
  4. 大图生成缩略图,避免原图直接输出。

批量转换 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 后,建议持续观察以下指标:

  1. 缓存命中率 Cache Hit Ratio
    命中率越高,源站带宽和计算压力越低。

  2. 源站带宽变化
    对比接入前后服务器公网出流量。

  3. 源站 CPU 和内存变化
    如果 HTML 和静态资源大量命中缓存,CPU 应明显下降。

  4. 对象存储账单变化
    如果使用 R2 替代传统对象存储,重点关注出口费用变化。

  5. 安全事件数量
    查看 WAF、Bot、Challenge、Blocked 请求数量。

  6. 可用性和响应时间
    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。

实际落地时,可以按以下顺序进行:

  1. 接入 Cloudflare DNS,并开启代理。
  2. 开启 HTTPS,使用 Full Strict。
  3. 配置静态资源长期缓存。
  4. 对适合的 HTML 页面启用边缘缓存。
  5. 用 R2 承载图片、附件、下载文件。
  6. 用 Pages 托管静态网站,减少服务器。
  7. 用 Tunnel 和 Zero Trust 保护内部系统。
  8. 用 WAF 拦截恶意请求。
  9. 用 Workers 替代轻量后端逻辑。
  10. 持续观察缓存命中率和源站带宽变化。

对于个人开发者,Cloudflare 可以帮你少买一台服务器;对于企业官网,Cloudflare 可以显著降低带宽和防护成本;对于高流量资源站,R2 的无出口流量费优势尤其明显;对于内部系统,Tunnel 和 Zero Trust 则能降低公网暴露和安全运维成本。

只要合理配置缓存、安全和部署流程,Cloudflare 不只是 CDN,而是一套完整的降本增效基础设施。

目录结构
全文