从 DNS 到源站防护:Cloudflare 生产部署全流程指南
Cloudflare 生产环境部署指南|零基础可学
在现代网站与应用部署中,Cloudflare 已经不仅仅是一个“CDN 加速服务”,它更像是一套覆盖 DNS、CDN、HTTPS、安全防护、访问控制、边缘计算、对象存储、零信任网络 等能力的综合平台。对于个人站长、中小企业、SaaS 服务商,甚至大型企业来说,合理使用 Cloudflare 可以显著提升网站访问速度、降低源站压力、增强安全性,并简化运维工作。
本文将从零基础角度出发,系统讲解如何在生产环境中部署 Cloudflare,包括域名接入、DNS 配置、HTTPS 设置、缓存策略、安全规则、源站保护、监控排障以及上线前检查清单。即使你之前没有使用过 Cloudflare,也可以按照本文一步步完成生产级配置。
一、Cloudflare 是什么?
Cloudflare 是一个全球化的网络服务平台,最常见的功能包括:
- DNS 托管
- CDN 内容分发
- HTTPS/TLS 证书管理
- DDoS 防护
- Web 应用防火墙 WAF
- Bot 防护
- 页面规则 / 配置规则
- Workers 边缘函数
- Zero Trust 零信任访问控制
- R2 对象存储
- Turnstile 人机验证
简单来说,当你的网站接入 Cloudflare 后,用户访问你的网站时,流量会先经过 Cloudflare 的全球节点,再转发到你的源站服务器。
访问链路通常如下:
用户浏览器
↓
Cloudflare 边缘节点
↓
你的源站服务器
这样做的好处是:
- 静态资源可以直接从离用户最近的 Cloudflare 节点返回;
- 源站真实 IP 可以隐藏,减少被攻击风险;
- Cloudflare 可以拦截恶意请求、机器人请求和 DDoS 流量;
- HTTPS 证书可以由 Cloudflare 自动管理;
- 可以在边缘节点实现重定向、缓存、鉴权等功能。
二、生产环境部署前的准备工作
在正式接入 Cloudflare 之前,建议先完成以下准备。
1. 准备一个可用域名
你需要拥有一个域名,例如:
example.com
域名可以在任意注册商购买,例如阿里云、腾讯云、GoDaddy、Namecheap、Cloudflare Registrar 等。
2. 准备源站服务器
源站服务器可以是:
- 云服务器 ECS / CVM / VPS
- Kubernetes 集群入口
- 负载均衡器
- 对象存储静态网站
- 自建 Nginx / Apache 服务
- Vercel、Netlify 等平台提供的服务
假设你的源站公网 IP 为:
203.0.113.10
或者你的源站域名为:
origin.example.com
3. 确认源站服务正常
在接入 Cloudflare 前,需要确保源站本身可以正常访问。
你可以使用以下命令测试:
curl -I http://203.0.113.10
如果源站已经配置 HTTPS,也可以测试:
curl -I https://origin.example.com
正常情况下应返回类似:
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html
4. 备份当前 DNS 记录
接入 Cloudflare 时,需要修改域名的 NS 服务器。如果之前你的域名已经配置过很多 DNS 记录,一定要提前备份,例如:
- A 记录
- CNAME 记录
- MX 邮件记录
- TXT 验证记录
- SPF / DKIM / DMARC 邮件安全记录
- 子域名记录
生产环境中,DNS 配置错误可能导致网站、邮件、API 服务不可用,因此备份非常重要。
三、注册并接入 Cloudflare
1. 创建 Cloudflare 账号
访问 Cloudflare 官网:
https://www.cloudflare.com/
注册账号并登录。
2. 添加站点
登录后点击:
Add a domain
输入你的域名,例如:
example.com
注意不要输入 www.example.com,而是输入根域名 example.com。
3. 选择套餐
Cloudflare 提供多个套餐:
| 套餐 | 适合场景 |
|---|---|
| Free | 个人网站、小型博客、测试环境 |
| Pro | 小型商业网站,需要基础 WAF |
| Business | 生产业务,需要更强 SLA、更多规则 |
| Enterprise | 大型企业、金融、电商、高并发场景 |
如果是零基础学习或中小型网站,Free 版本已经足够入门。如果是企业生产环境,建议至少考虑 Pro 或 Business。
4. 导入 DNS 记录
Cloudflare 会自动扫描你当前域名的 DNS 记录,但扫描结果不一定完整,因此需要人工检查。
常见配置示例:
| 类型 | 名称 | 内容 | 代理状态 |
|---|---|---|---|
| A | @ | 203.0.113.10 | 已代理 |
| A | www | 203.0.113.10 | 已代理 |
| CNAME | api | origin-api.example.com | 已代理 |
| MX | @ | mail.example.com | 仅 DNS |
| TXT | @ | v=spf1 include:xxx ~all | 仅 DNS |
这里要特别注意 代理状态:
-
橙色云朵:已代理
流量经过 Cloudflare,支持 CDN、安全防护、隐藏源站 IP。 -
灰色云朵:仅 DNS
只使用 Cloudflare DNS,不经过代理,不提供 CDN 和 WAF。
通常网站、API 可以开启代理;邮件相关记录不要开启代理。
四、修改域名 NS 服务器
添加域名后,Cloudflare 会分配两个 NS 服务器,例如:
amy.ns.cloudflare.com
bob.ns.cloudflare.com
你需要登录域名注册商后台,将原来的 NS 修改为 Cloudflare 提供的 NS。
修改后,等待全球 DNS 生效。通常几分钟到数小时不等,最长可能需要 24-48 小时。
你可以使用命令检查:
dig NS example.com
如果返回 Cloudflare 的 NS,说明接入成功。
五、DNS 生产环境配置建议
DNS 是生产环境的基础,配置时应遵循稳定、清晰、最小暴露原则。
1. 根域名和 www 域名
常见配置:
example.com A 203.0.113.10
www.example.com CNAME example.com
或者:
@ A 203.0.113.10
www CNAME @
推荐将 example.com 和 www.example.com 都开启 Cloudflare 代理。
2. API 子域名
如果你的后端 API 使用:
api.example.com
可以配置:
api A 203.0.113.10
是否开启代理取决于业务场景:
- 普通 HTTP API:建议开启代理;
- WebSocket API:Cloudflare 支持 WebSocket,可以开启代理;
- 特殊 TCP 服务:普通 Cloudflare 代理不支持,需要 Spectrum;
- 内部 API:不建议公网暴露,可结合 Zero Trust。
3. 邮件记录不要代理
邮件相关记录如 MX、mail、smtp、imap、pop 等通常不要开启代理。
示例:
MX @ mail.example.com
A mail 203.0.113.20
TXT @ v=spf1 include:example.com ~all
其中 mail.example.com 应保持灰色云朵,即仅 DNS。
4. 管理后台子域名
例如:
admin.example.com
生产环境不建议直接公开管理后台。可以采用以下方式:
- 使用 Cloudflare Access 进行身份验证;
- 配置 IP 白名单;
- 单独使用不易猜测的域名;
- 后台服务不直接暴露公网;
- 增加 MFA 多因素认证。
六、HTTPS/TLS 配置
HTTPS 是生产环境必须配置的基础能力。
Cloudflare 的 SSL/TLS 模式常见有以下几种:
| 模式 | 说明 | 是否推荐 |
|---|---|---|
| Off | 不启用 HTTPS | 不推荐 |
| Flexible | 浏览器到 Cloudflare 是 HTTPS,Cloudflare 到源站是 HTTP | 不推荐生产 |
| Full | 两段都是 HTTPS,但不严格校验证书 | 可临时使用 |
| Full Strict | 两段都是 HTTPS,并校验证书 | 强烈推荐 |
1. 推荐使用 Full Strict
生产环境推荐:
SSL/TLS encryption mode: Full (strict)
这意味着:
用户浏览器 --HTTPS--> Cloudflare --HTTPS--> 源站
这样可以确保全链路加密。
2. 源站证书配置
你可以使用以下证书之一:
- Let’s Encrypt 免费证书;
- Cloudflare Origin Certificate;
- 商业 CA 证书。
如果源站只通过 Cloudflare 访问,使用 Cloudflare Origin Certificate 是很方便的选择。
路径:
SSL/TLS → Origin Server → Create Certificate
生成证书后,将证书和私钥配置到 Nginx。
Nginx 示例:
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/cloudflare-origin.pem;
ssl_certificate_key /etc/nginx/ssl/cloudflare-origin.key;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
然后重载 Nginx:
nginx -t
systemctl reload nginx
3. 开启 Always Use HTTPS
在 Cloudflare 中开启:
SSL/TLS → Edge Certificates → Always Use HTTPS
这样所有 HTTP 请求都会自动跳转到 HTTPS。
4. 开启 HSTS 需谨慎
HSTS 可以强制浏览器使用 HTTPS,但一旦配置错误,可能导致用户长时间无法访问网站。
生产环境建议在确认 HTTPS 完全正常后再开启,且先使用较短时间测试,例如:
max-age=86400
确认无问题后再逐步延长。
七、缓存配置策略
Cloudflare 的核心能力之一是缓存。合理缓存可以大幅降低源站压力,提高访问速度。
1. 默认缓存行为
默认情况下,Cloudflare 通常会缓存静态资源,例如:
.jpg.png.gif.css.js.ico.svg.woff.woff2
动态 HTML 页面默认一般不会强缓存,除非你手动配置规则。
2. 静态资源缓存建议
对于带版本号的静态资源,例如:
/static/app.9f3a2c.js
/static/style.84ab1.css
可以设置较长缓存时间:
Cache-Control: public, max-age=31536000, immutable
这类资源内容变更后文件名会变化,因此可以长期缓存。
3. HTML 页面缓存建议
对于普通动态网站,不建议盲目缓存 HTML。否则可能出现:
- 用户看到旧页面;
- 登录状态错乱;
- 后台数据不更新;
- 个性化内容被错误缓存。
如果是纯静态网站、博客、文档站,可以考虑缓存 HTML,但需要设计好清理机制。
4. API 缓存建议
API 通常不建议默认缓存,尤其是涉及用户数据、订单、支付、权限的接口。
可以缓存的 API 一般包括:
- 公共配置接口;
- 商品分类;
- 新闻列表;
- 公共字典数据;
- 不含用户隐私的数据。
并且需要明确设置响应头:
Cache-Control: public, max-age=60
对于敏感接口,应设置:
Cache-Control: no-store
5. 缓存清理
当静态资源或页面更新后,可以在 Cloudflare 后台执行:
Caching → Configuration → Purge Cache
常见方式:
- Purge Everything:清理全部缓存;
- Custom Purge:按 URL 清理;
- Cache Tags:按标签清理,适合复杂业务。
生产环境不建议频繁使用 Purge Everything,因为可能瞬间增加源站压力。
八、安全防护配置
生产环境使用 Cloudflare 的重要目的之一就是安全防护。
1. 开启基础 DDoS 防护
Cloudflare 默认提供 DDoS 防护,通常无需额外配置。
在遭遇攻击时,可以开启:
Under Attack Mode
开启后,Cloudflare 会对访问者进行浏览器挑战验证。但这可能影响正常用户体验,因此不建议长期打开。
2. 配置 WAF 防火墙
路径通常为:
Security → WAF
建议开启 Cloudflare Managed Rules,尤其是针对:
- SQL 注入;
- XSS;
- 文件包含;
- 常见 CMS 漏洞;
- 恶意爬虫;
- 可疑请求头。
如果使用 WordPress,可以开启 WordPress 相关规则。
3. 配置自定义规则
常见规则示例:
阻止特定国家访问
如果业务只服务中国大陆或特定地区,可以限制其他国家访问。但要谨慎,避免误伤海外用户。
限制后台访问
例如仅允许指定 IP 访问后台:
URI Path contains "/admin"
AND IP Source Address not in {你的办公 IP}
→ Block
阻止恶意 User-Agent
User-Agent contains "sqlmap"
→ Block
限制敏感路径访问
URI Path contains ".env"
→ Block
常见应阻止的路径包括:
/.env
/.git
/wp-config.php.bak
/backup.zip
/config.php
4. Rate Limiting 限速
对于登录、注册、短信验证码、搜索等接口,建议配置速率限制。
示例:
路径:/api/login
规则:同一 IP 1 分钟超过 10 次
动作:Managed Challenge 或 Block
这样可以有效缓解暴力破解和恶意刷接口。
5. Bot 防护
如果你发现大量异常爬虫请求,可以使用:
- Bot Fight Mode;
- Super Bot Fight Mode;
- WAF 自定义规则;
- Turnstile 验证。
对于登录、注册、评论、表单提交场景,Cloudflare Turnstile 是一个不错的人机验证方案。
九、隐藏和保护源站 IP
很多人接入 Cloudflare 后,以为源站就安全了。但如果源站 IP 泄露,攻击者仍然可以绕过 Cloudflare 直接攻击服务器。
因此,生产环境必须保护源站 IP。
1. 防火墙只允许 Cloudflare IP
在服务器安全组或防火墙中,仅允许 Cloudflare IP 段访问 80 和 443 端口。
思路如下:
允许 Cloudflare IP → 访问 80/443
拒绝其他所有 IP → 访问 80/443
Cloudflare 官方会公布 IP 段,需要定期同步。
Linux UFW 示例:
ufw allow from 173.245.48.0/20 to any port 443
ufw allow from 103.21.244.0/22 to any port 443
ufw deny 443
实际生产中建议使用自动脚本同步 Cloudflare IP 列表。
2. 不要暴露源站域名
避免将源站地址设置为容易被猜到的域名,例如:
origin.example.com
server.example.com
ip.example.com
如果必须使用源站域名,建议不要公开,且不要开启代理错误导致泄露。
3. 检查历史 DNS 记录
攻击者可能通过历史 DNS 数据查到你的源站 IP。因此,如果源站 IP 曾经暴露,建议更换源站 IP。
4. 源站增加鉴权
更严格的做法是在源站校验请求是否来自 Cloudflare,例如:
- 校验 Cloudflare IP;
- 校验自定义请求头;
- 使用 Cloudflare Authenticated Origin Pulls;
- 使用 mTLS。
其中 Authenticated Origin Pulls 可以确保请求确实来自 Cloudflare。
十、真实客户端 IP 配置
接入 Cloudflare 后,源站看到的访问 IP 默认可能是 Cloudflare 节点 IP,而不是用户真实 IP。
Cloudflare 会通过请求头传递真实 IP:
CF-Connecting-IP: 用户真实 IP
X-Forwarded-For: 用户真实 IP, Cloudflare IP
Nginx 配置真实 IP
需要配置 real_ip_header:
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
real_ip_header CF-Connecting-IP;
生产环境应配置完整 Cloudflare IP 段。
配置后,你的日志中才能正确记录用户真实 IP,便于安全分析、限流、审计。
十一、页面规则与重定向
Cloudflare 可以在边缘节点处理重定向,减少源站负担。
1. www 与非 www 统一
如果你希望统一到非 www:
www.example.com/* → https://example.com/$1
如果你希望统一到 www:
example.com/* → https://www.example.com/$1
建议全站只保留一个主域,避免 SEO 权重分散。
2. HTTP 跳转 HTTPS
虽然可以在源站 Nginx 配置,但在 Cloudflare 开启 Always Use HTTPS 更简单。
3. 旧路径跳转新路径
例如网站改版:
/old-post/* → /new-post/$1
生产环境需要尽量使用 301 永久重定向,但上线前要确认路径正确,避免搜索引擎收录错误。
十二、Cloudflare Workers 简介
Cloudflare Workers 是运行在边缘节点的 JavaScript/TypeScript 代码,可以在请求到达源站之前处理逻辑。
常见用途:
- 边缘重定向;
- A/B 测试;
- 请求鉴权;
- 修改响应头;
- 简单 API;
- 防盗链;
- 图片处理;
- 灰度发布。
示例:添加安全响应头:
export default {
async fetch(request, env, ctx) {
const response = await fetch(request);
const newResponse = new Response(response.body, response);
newResponse.headers.set("X-Frame-Options", "DENY");
newResponse.headers.set("X-Content-Type-Options", "nosniff");
newResponse.headers.set("Referrer-Policy", "strict-origin-when-cross-origin");
return newResponse;
}
}
对于零基础用户,不建议一开始就在生产环境大量使用 Workers。可以先从简单重定向、响应头修改开始。
十三、生产环境监控与日志
上线后不能只看“能不能访问”,还要持续监控。
1. Cloudflare Analytics
Cloudflare 后台提供基础分析,包括:
- 请求量;
- 带宽;
- 缓存命中率;
- 威胁请求;
- 状态码;
- 国家地区分布;
- 边缘节点情况。
重点关注:
5xx 错误
缓存命中率
WAF 拦截数量
源站响应时间
异常流量峰值
2. 源站日志
源站仍然需要保留日志,例如 Nginx access.log、error.log。
建议日志中记录:
- 真实客户端 IP;
- 请求路径;
- User-Agent;
- 状态码;
- 响应时间;
- Referer;
- 请求 ID。
3. 告警系统
生产环境建议配置告警,例如:
- 网站不可访问;
- 5xx 错误增多;
- 源站 CPU/内存过高;
- 带宽异常;
- 登录接口请求异常;
- 证书即将过期。
可以使用 Prometheus、Grafana、Uptime Kuma、阿里云监控、腾讯云监控等工具。
十四、常见故障与排查方法
1. 521 Web Server Is Down
含义:Cloudflare 无法连接源站。
可能原因:
- 源站服务器宕机;
- Nginx 未启动;
- 安全组拦截了 Cloudflare;
- 防火墙配置错误;
- 源站端口未开放。
排查:
systemctl status nginx
curl -I http://127.0.0.1
curl -I https://源站IP
2. 522 Connection Timed Out
含义:Cloudflare 连接源站超时。
可能原因:
- 源站负载过高;
- 网络不稳定;
- 防火墙丢弃连接;
- 源站响应太慢。
建议检查服务器性能和安全组规则。
3. 525 SSL Handshake Failed
含义:Cloudflare 与源站 SSL 握手失败。
可能原因:
- 源站证书配置错误;
- SSL 模式不匹配;
- Nginx 不支持所需协议;
- 证书过期。
建议使用 Full Strict 并确保证书有效。
4. 526 Invalid SSL Certificate
含义:源站证书无效,常见于 Full Strict 模式。
解决:
- 安装有效证书;
- 使用 Let’s Encrypt;
- 使用 Cloudflare Origin Certificate;
- 检查证书域名是否匹配。
5. 循环重定向
常见原因是 Cloudflare 使用 Flexible 模式,而源站又强制 HTTP 跳 HTTPS。
解决:
- 不要使用 Flexible;
- 改为 Full 或 Full Strict;
- 检查 Nginx 重定向规则。
十五、上线前生产检查清单
正式上线前,建议逐项检查。
DNS 检查
- [ ] 根域名解析正确;
- [ ] www 解析正确;
- [ ] API 域名解析正确;
- [ ] 邮件 MX/TXT 记录未丢失;
- [ ] 不该代理的记录保持灰色云朵;
- [ ] TTL 设置合理。
HTTPS 检查
- [ ] Cloudflare SSL 模式为 Full Strict;
- [ ] 源站证书有效;
- [ ] HTTP 自动跳转 HTTPS;
- [ ] 无循环重定向;
- [ ] HSTS 配置谨慎。
安全检查
- [ ] WAF 已开启;
- [ ] 后台路径有限制;
- [ ] 登录接口有限速;
- [ ] 敏感路径已阻止;
- [ ] 源站防火墙只允许 Cloudflare IP;
- [ ] 真实客户端 IP 配置正确。
缓存检查
- [ ] 静态资源缓存策略合理;
- [ ] HTML 是否缓存已明确;
- [ ] API 不误缓存敏感数据;
- [ ] 更新发布后有缓存清理方案;
- [ ] 缓存命中率有监控。
监控检查
- [ ] 网站可用性监控已配置;
- [ ] 源站资源监控已配置;
- [ ] 错误日志可查看;
- [ ] 5xx 告警已配置;
- [ ] 证书过期告警已配置。
十六、推荐的生产环境配置方案
对于大多数网站,推荐如下配置:
DNS:
- example.com 开启代理
- www.example.com 开启代理
- api.example.com 按需开启代理
- mail / smtp / imap 不开启代理
SSL/TLS:
- Full Strict
- Always Use HTTPS
- 源站使用有效证书
缓存:
- 静态资源长期缓存
- HTML 谨慎缓存
- 用户接口不缓存
- 配置按 URL 精确清理缓存
安全:
- 开启 WAF 托管规则
- 登录接口限速
- 后台路径访问控制
- 阻止敏感文件路径
- 源站只允许 Cloudflare IP
监控:
- Cloudflare Analytics
- 源站日志
- 可用性监控
- 5xx 错误告警
十七、新手常见误区
误区一:开启 Cloudflare 就一定安全
Cloudflare 能提升安全性,但不是万能的。如果源站 IP 泄露、后台弱密码、应用存在漏洞,仍然可能被攻击。
误区二:所有记录都开启代理
邮件、SSH、数据库等服务不能随意开启 Cloudflare HTTP 代理。普通 Cloudflare 代理主要适用于 HTTP/HTTPS 流量。
误区三:使用 Flexible SSL
Flexible 容易导致循环重定向,也无法保证 Cloudflare 到源站之间的加密安全。生产环境应使用 Full Strict。
误区四:缓存越多越好
缓存错误比不缓存更危险。尤其是用户页面、订单页面、支付接口,一旦被错误缓存,可能造成严重数据泄露。
误区五:忽略真实 IP
如果源站没有配置真实客户端 IP,日志里全是 Cloudflare 节点 IP,会影响审计、封禁、限流和问题定位。
十八、总结
Cloudflare 是一个非常强大的生产环境网络平台。对于零基础用户来说,最重要的是先掌握几个核心概念:DNS、代理状态、HTTPS 模式、缓存、安全规则、源站保护。
如果你是第一次部署,建议按照以下顺序进行:
- 备份原 DNS;
- 添加域名到 Cloudflare;
- 导入并检查 DNS 记录;
- 修改 NS;
- 配置 Full Strict HTTPS;
- 开启 Always Use HTTPS;
- 设置合理缓存策略;
- 开启基础 WAF;
- 配置源站防火墙;
- 设置监控和告警;
- 小流量验证后正式上线。
生产环境部署的目标不是“能访问就行”,而是要做到:
- 访问稳定;
- HTTPS 安全;
- 缓存可控;
- 源站隐藏;
- 日志准确;
- 攻击可防;
- 故障可排查;
- 发布可回滚。
只要你按照本文的步骤逐项完成,即使是零基础,也可以搭建出一套相对规范、可靠、安全的 Cloudflare 生产环境部署方案。