Cloudflare 接入避坑指南:DNS、HTTPS、缓存与源站配置一次讲清
Cloudflare 常见问题汇总|附配置文件
Cloudflare 是目前使用最广泛的全球网络服务平台之一,常见用途包括:DNS 解析、CDN 加速、DDoS 防护、HTTPS 证书管理、WAF 防火墙、页面规则、Zero Trust、Workers 边缘计算等。对于个人站长、中小企业、开发者和运维团队来说,Cloudflare 可以在较低成本下显著提升网站的访问速度、安全性与可用性。
不过,Cloudflare 的功能较多,新手在接入和配置过程中经常会遇到各种问题,例如:域名解析不生效、HTTPS 访问异常、网站出现 522/525 错误、真实 IP 获取不到、缓存不更新、国内访问速度不稳定等。本文将系统整理 Cloudflare 的常见问题,并附上常用配置文件示例,方便快速排查和部署。
一、Cloudflare 是什么?
Cloudflare 本质上是一个位于用户和源站服务器之间的反向代理网络平台。
当你把域名接入 Cloudflare 后,用户访问你的网站时,请求通常会先到达 Cloudflare 的边缘节点,然后由 Cloudflare 根据缓存、规则、安全策略等设置决定是否回源访问你的服务器。
简单来说,访问链路大致如下:
用户浏览器
↓
Cloudflare 边缘节点
↓
源站服务器
Cloudflare 可以帮助你完成以下事情:
- DNS 托管与解析;
- CDN 静态资源加速;
- 免费 HTTPS 证书;
- DDoS 攻击防护;
- Web 应用防火墙;
- 防爬虫、防恶意请求;
- 页面缓存与访问规则;
- 隐藏源站真实 IP;
- Workers 边缘脚本处理;
- Zero Trust 安全访问控制。
二、Cloudflare 接入流程
一般情况下,接入 Cloudflare 的流程如下:
- 注册 Cloudflare 账号;
- 添加你的域名;
- Cloudflare 扫描现有 DNS 记录;
- 检查并补充 DNS 解析记录;
- 将域名注册商处的 NS 服务器修改为 Cloudflare 提供的 NS;
- 等待 DNS 生效;
- 配置 SSL/TLS 模式;
- 配置缓存、安全、防火墙等规则;
- 测试网站访问是否正常。
需要注意的是,Cloudflare 接管的是域名的权威 DNS。也就是说,你需要在域名注册商后台修改 NS 服务器,而不是仅仅添加一条 A 记录或 CNAME 记录。
三、DNS 解析相关问题
1. 为什么修改 DNS 后没有立即生效?
DNS 生效需要时间。通常 NS 服务器切换后会在几分钟到数小时内生效,但在部分地区、部分运营商网络环境下,缓存可能会持续更久。
常见原因包括:
- 本地 DNS 缓存未刷新;
- 运营商 DNS 缓存未更新;
- 域名注册商 NS 修改尚未完成;
- Cloudflare DNS 记录配置错误;
- 浏览器缓存导致访问旧地址。
可以使用以下命令检查:
nslookup example.com
或:
dig example.com
dig NS example.com
如果你想检查指定 DNS 服务器的解析结果:
dig @1.1.1.1 example.com
dig @8.8.8.8 example.com
2. Cloudflare DNS 中橙色云朵和灰色云朵有什么区别?
Cloudflare DNS 记录旁边通常有两种状态:
| 状态 | 含义 |
|---|---|
| 橙色云朵 | 开启 Cloudflare 代理,流量经过 Cloudflare |
| 灰色云朵 | 仅 DNS 解析,流量不经过 Cloudflare |
如果开启橙色云朵,用户看到的是 Cloudflare 节点 IP,而不是你的源站 IP。此时 Cloudflare 可以提供 CDN、WAF、HTTPS、防护等功能。
如果是灰色云朵,Cloudflare 只负责 DNS 解析,不提供反向代理保护和缓存服务。
常见建议:
- 网站主域名、www 子域名:通常开启橙色云朵;
- 邮件相关记录:必须保持灰色云朵;
- SSH、FTP、数据库连接:通常保持灰色云朵,或使用 Cloudflare Tunnel;
- API 服务:根据业务情况决定是否代理。
3. MX、TXT、SPF、DKIM、DMARC 记录能否开启代理?
不能。
邮件相关 DNS 记录不应该开启 Cloudflare 代理,尤其是 MX 记录不能走橙色云朵。Cloudflare 代理主要支持 HTTP/HTTPS 流量,邮件协议如 SMTP、POP3、IMAP 并不适合通过普通 Cloudflare CDN 代理。
邮件相关记录应保持 DNS Only。
例如:
MX example.com mail.example.com
A mail 192.0.2.10 DNS Only
TXT example.com v=spf1 include:_spf.example.com ~all
TXT default._domainkey.example.com DKIM_PUBLIC_KEY
TXT _dmarc.example.com v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com
四、SSL/TLS 常见问题
1. Cloudflare SSL/TLS 模式应该怎么选?
Cloudflare 常见 SSL/TLS 模式包括:
| 模式 | 浏览器到 Cloudflare | Cloudflare 到源站 | 是否推荐 |
|---|---|---|---|
| Off | HTTP | HTTP | 不推荐 |
| Flexible | HTTPS | HTTP | 不推荐 |
| Full | HTTPS | HTTPS | 一般可用 |
| Full Strict | HTTPS | HTTPS 且校验证书 | 推荐 |
最推荐的模式是:
Full (strict)
也就是“完全(严格)”模式。
原因是它可以保证浏览器到 Cloudflare、Cloudflare 到源站之间全链路 HTTPS 加密,并且会校验源站证书是否有效。
2. 为什么 Flexible 模式容易出问题?
Flexible 模式下,用户到 Cloudflare 是 HTTPS,但 Cloudflare 到源站是 HTTP。这样容易导致以下问题:
- WordPress 后台无限重定向;
- 网站强制 HTTPS 后循环跳转;
- 登录状态异常;
- Cookie Secure 属性异常;
- 后端应用判断协议错误;
- SEO 与安全性不佳。
如果你的源站支持 HTTPS,应尽量避免使用 Flexible,改为 Full 或 Full Strict。
3. 525 SSL handshake failed 是什么原因?
525 错误表示 Cloudflare 与源站建立 SSL 握手失败。
常见原因:
- 源站没有开启 443 端口;
- 源站证书过期;
- 源站证书域名不匹配;
- 源站仅支持过旧 TLS 版本;
- Nginx/Apache SSL 配置错误;
- 防火墙阻止了 Cloudflare 回源 IP;
- SNI 配置异常。
排查方法:
curl -Iv https://example.com --resolve example.com:443:源站IP
如果直连源站 HTTPS 都失败,则说明问题在源站配置,而不是 Cloudflare。
4. 526 Invalid SSL certificate 是什么原因?
526 表示 Cloudflare 在 Full Strict 模式下无法验证源站证书。
常见原因包括:
- 使用了自签名证书;
- 证书已过期;
- 证书域名不匹配;
- 中间证书链不完整;
- 源站证书不是受信任 CA 签发;
- Cloudflare Origin Certificate 配置错误。
解决方案:
- 使用 Let’s Encrypt 证书;
- 使用 Cloudflare Origin Certificate;
- 确保证书包含当前访问域名;
- 补全 fullchain 证书链;
- 检查 Nginx 或 Apache 配置。
五、Cloudflare 常见错误码
1. 521 Web Server Is Down
521 表示 Cloudflare 无法连接到你的源站服务器。
可能原因:
- 源站服务器宕机;
- Nginx/Apache 未启动;
- 80 或 443 端口未开放;
- 安全组、防火墙拦截 Cloudflare IP;
- 源站拒绝 Cloudflare 请求;
- 服务器负载过高。
排查命令:
systemctl status nginx
systemctl status apache2
ss -lntp
curl -I http://127.0.0.1
2. 522 Connection Timed Out
522 表示 Cloudflare 连接源站超时。
常见原因:
- 源站响应慢;
- 防火墙拦截;
- 网络质量差;
- 源站服务器负载过高;
- 后端程序阻塞;
- 数据库查询过慢;
- 回源链路不稳定。
建议检查:
top
htop
iostat
free -m
journalctl -xe
如果是应用性能问题,还需要检查数据库慢查询、PHP-FPM、Node.js、Java 服务状态等。
3. 523 Origin Is Unreachable
523 表示 Cloudflare 无法到达源站 IP。
常见原因:
- DNS A 记录写错;
- 源站 IP 已变更;
- 服务器网络故障;
- 云服务器安全组限制;
- 路由不可达。
可以使用:
ping 源站IP
traceroute 源站IP
curl -I http://源站IP
4. 524 A Timeout Occurred
524 表示 Cloudflare 已连接源站,但源站长时间没有返回响应。
常见场景:
- 后台导入导出任务;
- 大文件上传处理;
- API 请求耗时过长;
- 数据库查询非常慢;
- 程序死循环;
- 队列任务同步执行。
解决建议:
- 将耗时任务改为异步队列;
- 优化数据库查询;
- 增加缓存;
- 避免请求中执行长时间任务;
- 使用后台任务处理导出;
- 对接口做分页和限流。
六、缓存相关问题
1. 为什么修改网页后 Cloudflare 仍显示旧内容?
Cloudflare 会缓存静态资源,例如:
- CSS;
- JavaScript;
- 图片;
- 字体;
- HTML 页面,取决于规则配置。
解决方法:
- 在 Cloudflare 后台清理缓存;
- Purge Everything;
- 只清理指定 URL;
- 修改静态资源版本号;
- 配置合理的 Cache-Control;
- 对后台、接口、动态页面绕过缓存。
例如给静态资源加版本号:
2. Cache Everything 是否可以直接开启?
不建议对整个网站无脑开启 Cache Everything。
如果你的网站是纯静态站点,可以开启。但如果是 WordPress、电商网站、会员系统、后台系统、API 服务,直接缓存所有内容可能导致严重问题,例如:
- 用户 A 看到用户 B 的页面;
- 登录状态异常;
- 购物车内容错乱;
- 后台页面被缓存;
- API 返回旧数据;
- 表单提交异常。
建议只对静态页面开启缓存,并排除:
/wp-admin/*
/wp-login.php
/api/*
/user/*
/cart/*
/checkout/*
3. 推荐的缓存策略
对于常规网站,可以采用如下策略:
- HTML:短缓存或不缓存;
- CSS/JS:长缓存;
- 图片:长缓存;
- API:通常不缓存;
- 后台页面:不缓存;
- 带登录态页面:不缓存。
源站可以设置:
location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|webp|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
七、真实 IP 获取问题
开启 Cloudflare 代理后,源站服务器看到的访问 IP 默认会变成 Cloudflare 节点 IP,而不是用户真实 IP。
Cloudflare 会通过请求头传递真实 IP,常见字段包括:
CF-Connecting-IP
X-Forwarded-For
X-Real-IP
其中最推荐使用:
CF-Connecting-IP
八、Nginx 获取 Cloudflare 真实 IP 配置
下面是 Nginx 配置示例:
# /etc/nginx/conf.d/cloudflare-real-ip.conf
real_ip_header CF-Connecting-IP;
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;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2a06:98c0::/29;
set_real_ip_from 2c0f:f248::/32;
配置完成后测试:
nginx -t
systemctl reload nginx
在日志中可以验证真实 IP 是否恢复。
九、Nginx 站点 HTTPS 配置示例
以下是一个较通用的 Nginx HTTPS 配置:
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;
root /var/www/example.com;
index index.html index.htm index.php;
ssl_certificate /etc/ssl/example.com/fullchain.pem;
ssl_certificate_key /etc/ssl/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers off;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
try_files $uri $uri/ /index.html;
}
location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|webp|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
location ~ /\. {
deny all;
}
}
如果是 PHP 项目,可增加:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
十、Apache 获取真实 IP 配置
如果你使用 Apache,可以安装并启用 mod_remoteip:
a2enmod remoteip
systemctl restart apache2
配置文件示例:
# /etc/apache2/conf-available/cloudflare-remoteip.conf
RemoteIPHeader CF-Connecting-IP
RemoteIPTrustedProxy 173.245.48.0/20
RemoteIPTrustedProxy 103.21.244.0/22
RemoteIPTrustedProxy 103.22.200.0/22
RemoteIPTrustedProxy 103.31.4.0/22
RemoteIPTrustedProxy 141.101.64.0/18
RemoteIPTrustedProxy 108.162.192.0/18
RemoteIPTrustedProxy 190.93.240.0/20
RemoteIPTrustedProxy 188.114.96.0/20
RemoteIPTrustedProxy 197.234.240.0/22
RemoteIPTrustedProxy 198.41.128.0/17
RemoteIPTrustedProxy 162.158.0.0/15
RemoteIPTrustedProxy 104.16.0.0/13
RemoteIPTrustedProxy 104.24.0.0/14
RemoteIPTrustedProxy 172.64.0.0/13
RemoteIPTrustedProxy 131.0.72.0/22
启用配置:
a2enconf cloudflare-remoteip
systemctl reload apache2
十一、Cloudflare 防火墙与安全设置
1. 安全等级应该怎么设置?
Cloudflare 安全等级包括:
- Essentially Off;
- Low;
- Medium;
- High;
- Under Attack。
一般网站建议使用:
Medium
如果遭受攻击,可以临时开启:
Under Attack
但不建议长期使用 Under Attack,因为它会增加访问验证步骤,影响用户体验。
2. 如何限制后台访问?
如果你的后台路径固定,例如 WordPress 后台,可以在 Cloudflare WAF 中添加规则:
URI Path starts with /wp-admin
AND Country not equals CN
Then Block
或者只允许指定 IP:
URI Path starts with /admin
AND IP Source Address not in 你的办公IP
Then Block
这样可以有效减少后台暴力破解和扫描攻击。
3. 如何防止恶意爬虫?
可采用以下方式:
- 开启 Bot Fight Mode;
- 对异常 User-Agent 设置拦截;
- 对高频访问 IP 限速;
- 对敏感接口添加 Turnstile;
- 使用 WAF 自定义规则;
- 对 API 增加鉴权;
- 禁止空 UA 或明显恶意 UA。
示例规则:
User Agent contains python-requests
OR User Agent contains curl
OR User Agent contains wget
Then Managed Challenge
需要注意,不能完全依赖 User-Agent,因为它很容易伪造。
十二、Cloudflare 页面规则与规则集建议
虽然 Cloudflare 旧版 Page Rules 仍然常见,但现在更推荐使用 Rules,包括:
- Cache Rules;
- Redirect Rules;
- Origin Rules;
- Transform Rules;
- WAF Custom Rules。
常见规则示例:
1. 后台不缓存
If URI Path starts with /wp-admin
Then Cache eligibility: Bypass cache
2. API 不缓存
If URI Path starts with /api
Then Cache eligibility: Bypass cache
3. 静态资源长缓存
If File extension is css/js/png/jpg/jpeg/webp/svg/woff2
Then Edge TTL: 1 month
4. HTTP 跳转 HTTPS
If scheme is http
Then Redirect to https://hostname/path
十三、WordPress 使用 Cloudflare 的注意事项
WordPress 站点接入 Cloudflare 后,最常见的问题是 HTTPS 重定向循环和后台缓存异常。
建议配置:
- SSL/TLS 使用 Full Strict;
- 源站安装有效 HTTPS 证书;
- 后台路径不缓存;
- 登录页面不缓存;
- WooCommerce 页面不缓存;
- 评论、搜索、预览页面谨慎缓存;
- 使用真实 IP 配置;
- 开启 Brotli 压缩;
- 静态资源设置长缓存;
- 不要对登录用户缓存 HTML。
WordPress 可在 wp-config.php 中加入:
if (isset($_SERVER['HTTP_CF_VISITOR'])) {
$cf_visitor = json_decode($_SERVER['HTTP_CF_VISITOR']);
if (isset($cf_visitor->scheme) && $cf_visitor->scheme === 'https') {
$_SERVER['HTTPS'] = 'on';
}
}
if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
}
十四、Cloudflare Tunnel 配置示例
Cloudflare Tunnel 可以让你不暴露源站公网 IP,也不需要在服务器上开放 80/443 端口,适合内网服务、安全后台、开发测试环境。
安装 cloudflared 后,可以创建配置文件:
# /etc/cloudflared/config.yml
tunnel: your-tunnel-id
credentials-file: /etc/cloudflared/your-tunnel-id.json
ingress:
- hostname: app.example.com
service: http://127.0.0.1:3000
- hostname: admin.example.com
service: http://127.0.0.1:8080
- service: http_status:404
启动服务:
cloudflared tunnel run your-tunnel-name
设置为系统服务:
cloudflared service install
systemctl enable cloudflared
systemctl start cloudflared
Tunnel 的优点:
- 不暴露源站 IP;
- 减少被扫描风险;
- 适合内网穿透;
- 可结合 Zero Trust 做身份验证;
- 不需要开放入站端口。
十五、Cloudflare Workers 简单配置示例
Cloudflare Workers 可以在边缘节点运行 JavaScript 代码,用于重定向、修改请求、鉴权、接口代理等。
示例:强制跳转到 www 域名:
export default {
async fetch(request) {
const url = new URL(request.url)
if (url.hostname === 'example.com') {
url.hostname = 'www.example.com'
return Response.redirect(url.toString(), 301)
}
return fetch(request)
}
}
示例:添加安全响应头:
export default {
async fetch(request) {
const response = await fetch(request)
const newHeaders = new Headers(response.headers)
newHeaders.set('X-Frame-Options', 'SAMEORIGIN')
newHeaders.set('X-Content-Type-Options', 'nosniff')
newHeaders.set('Referrer-Policy', 'strict-origin-when-cross-origin')
newHeaders.set('Content-Security-Policy', "default-src 'self'")
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders
})
}
}
十六、国内访问 Cloudflare 慢怎么办?
很多用户会关心国内访问 Cloudflare 的速度。需要明确的是,Cloudflare 免费版在中国大陆通常没有专门的大陆节点,访问质量受运营商、地区、国际出口、线路拥塞等因素影响。
可考虑以下方案:
- 静态资源使用国内 CDN;
- 主站根据地区分流;
- 使用 Cloudflare 仅做海外访问加速;
- 使用 DNS 智能解析;
- 购买适合国内访问的 CDN;
- 图片、JS、CSS 分离到更稳定的资源域名;
- 减少页面资源数量;
- 开启 Brotli 和 HTTP/2、HTTP/3;
- 优化首屏加载。
如果用户主要来自中国大陆,Cloudflare 免费版不一定是最佳加速方案。它更适合全球访问、海外用户、防护和安全场景。
十七、常用安全响应头配置
可以在 Nginx 中添加如下安全响应头:
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
如果确定全站 HTTPS 稳定,可以添加 HSTS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
注意:HSTS 一旦启用,浏览器会强制使用 HTTPS。如果源站 HTTPS 配置不稳定,不建议贸然开启较长时间的 HSTS。
十八、常见排查命令汇总
DNS 检查
dig example.com
dig NS example.com
dig A example.com
dig AAAA example.com
HTTP 检查
curl -I https://example.com
curl -Iv https://example.com
指定源站 IP 检查
curl -Iv https://example.com --resolve example.com:443:源站IP
检查端口
ss -lntp
查看 Nginx 状态
systemctl status nginx
nginx -t
查看日志
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
十九、推荐配置清单
如果你希望快速获得一个较稳定的 Cloudflare 配置,可以参考以下清单:
- DNS:网站记录开启橙色云朵;
- 邮件记录:保持 DNS Only;
- SSL/TLS:选择 Full Strict;
- 源站:安装有效证书;
- Always Use HTTPS:开启;
- Automatic HTTPS Rewrites:开启;
- Brotli:开启;
- HTTP/2:开启;
- HTTP/3:视情况开启;
- 后台路径:绕过缓存;
- API 路径:绕过缓存;
- 静态资源:设置长缓存;
- 真实 IP:源站配置 CF-Connecting-IP;
- WAF:开启基础安全规则;
- 登录后台:限制地区或 IP;
- 遭受攻击时:临时开启 Under Attack;
- 定期检查 Cloudflare IP 段更新;
- 定期查看访问日志与安全事件。
二十、总结
Cloudflare 是一个非常强大的网络服务平台,既可以作为 DNS 服务商,也可以作为 CDN、安全网关和边缘计算平台。对于大多数网站来说,正确接入 Cloudflare 后,可以获得更好的安全性、更简单的 HTTPS 管理、更强的抗攻击能力以及一定程度的访问加速。
但 Cloudflare 并不是“开启就万事大吉”。很多问题并非来自 Cloudflare 本身,而是由于 DNS、SSL、源站防火墙、缓存策略、真实 IP 配置、应用程序逻辑等环节没有正确设置。尤其是 SSL/TLS 模式、缓存规则、后台路径排除、源站证书、Cloudflare 回源 IP 放行,是最容易出错的几个重点。
如果你是新手,建议优先采用以下原则:
- SSL 使用 Full Strict;
- 源站安装有效证书;
- 不要无脑缓存动态页面;
- 后台和 API 必须绕过缓存;
- 配置真实 IP;
- 邮件记录不要开启代理;
- 出现错误码时先区分是源站问题还是 Cloudflare 问题;
- 国内用户为主的网站,应谨慎评估 Cloudflare 免费版的访问质量。
只要按照本文的排查思路和配置示例逐项检查,大多数 Cloudflare 常见问题都可以快速定位并解决。