Proxy 代理模式 vs DNS Only 模式
Cloudflare DNS 记录有两种模式:代理模式(橙色云朵) 和 DNS Only 模式(灰色云朵)。
核心区别
| 特性 | Proxy (橙色云朵) | DNS Only (灰色云朵) |
|---|---|---|
| 图标 | ☁️ 橙色 | ☁️ 灰色 |
| 流量 | 经过 Cloudflare | 直连源站 |
| IP 地址 | Cloudflare IP | 源站真实 IP |
| 功能 | 全部 Cloudflare 功能 | 仅 DNS 解析 |
| HTTPS | Cloudflare 证书 | 源站自备证书 |
| 缓存 | 启用 | 不启用 |
| 防护 | DDoS/WAF 防护 | 无防护 |
Proxy 代理模式 (橙色云朵)
工作流程
用户 → Cloudflare CDN → 源站
(全球加速/安全防护)功能特性
1. 性能优化
- 全球 CDN 加速
- 静态资源缓存
- HTTP/3 支持
- Brotli 压缩
- 自动压缩图片
- HTTP/2 推送
2. 安全防护
- DDoS 攻击防护
- WAF (Web 应用防火墙)
- Rate Limiting (速率限制)
- Bot 管理
- 热link 保护
- 隐藏源站 IP
3. 可靠性
- 自动负载均衡
- 智能路由
- 故障转移
- 源站健康检查
4. SSL/TLS
- 免费证书
- 自定义证书上传
- Universal SSL
- Full SSL 模式
- HSTS 支持
何时使用 Proxy
✅ 推荐使用的场景:
- 网站需要加速
- 需要隐藏源站 IP
- 需要防护 DDoS 攻击
- 需要 WAF 保护
- 需要缓存静态资源
- 使用 Cloudflare Workers
- 使用 Pages Functions
❌ 不建议使用的场景:
- 源站服务运行在非标准端口
- 源站需要真实访问 IP
- 特定协议不支持代理(如 FTP、SSH)
Proxy 模式下的限制
不支持的服务:
- FTP (21)
- SSH (22)
- SMTP (25)
- 非标准 HTTP 端口
- 需要源站真实 IP 的服务
支持的标准端口:
HTTP: 80, 8080, 8880, 2052, 2082
HTTPS: 443, 2053, 2083, 2087, 2096, 8443DNS Only 模式 (灰色云朵)
工作流程
用户 → 直接连接源站
(仅 DNS 解析)功能特性
仅提供 DNS 解析服务:
- DNS 记录管理
- DNSSEC 支持
- 自定义 DNS 记录
- 快速 DNS 更新
不包含:
- 无 CDN 加速
- 无缓存功能
- 无安全防护
- 无 DDoS 防护
- 源站 IP 暴露
何时使用 DNS Only
✅ 推荐使用的场景:
- 服务运行在非标准端口
- 需要 SSL 直连源站
- FTP/SFTP/SSH 服务
- 邮件服务器 (MX 记录)
- 数据库直连
- 内网服务
- 需要看到真实访问 IP
- 第三方服务验证(如域名验证)
DNS Only 示例配置
# Web 服务器 - 代理模式
A www 192.0.2.1 (橙色云朵)
# FTP 服务器 - DNS Only
A ftp 192.0.2.2 (灰色云朵)
# 邮件服务器 - DNS Only
A mail 192.0.2.3 (灰色云朵)
MX @ mail.example.com
# 数据库 - DNS Only
A db 192.0.2.4 (灰色云朵)
# API 服务器 - 代理模式
A api 192.0.2.5 (橙色云朵)切换模式
切换到 Proxy 模式
- 登录 Cloudflare Dashboard
- 选择域名 → DNS → Records
- 点击记录旁的 橙色云朵 图标
注意: 切换到 Proxy 模式后:
- 原有的 SSL 证书需要配置 Cloudflare SSL
- 源站端口必须是支持的 HTTP(S) 端口
切换到 DNS Only 模式
- 登录 Cloudflare Dashboard
- 选择域名 → DNS → Records
- 点击记录旁的 灰色云朵 图标
注意: 切换到 DNS Only 后:
- 失去 Cloudflare 的所有安全防护
- 源站 IP 会暴露
- 无法使用 Cloudflare 缓存
常见配置场景
场景 1: 标准网站
A @ 192.0.2.1 (橙色云朵)
A www 192.0.2.1 (橙色云朵)
CNAME mail mail.example.com (灰色云朵)
MX @ mail.example.com场景 2: 带非标准端口服务
# Web - 代理
A www 192.0.2.1 (橙色云朵)
# 游戏服务器端口 7777 - DNS Only
A game 192.0.2.2 (灰色云朵)
# API - 代理
A api 192.0.2.3 (橙色云朵)场景 3: 开发环境
# 生产环境 - 代理
A www 192.0.2.1 (橙色云朵)
# 开发环境 - DNS Only (端口 3000)
A dev 192.0.2.2 (灰色云朵)场景 4: 多服务部署
# Web - 代理
A @ 192.0.2.1 (橙色云朵)
# API - 代理
A api 192.0.2.2 (橙色云朵)
# FTP - DNS Only
A ftp 192.0.2.3 (灰色云朵)
# Mail - DNS Only
A mail 192.0.2.4 (灰色云朵)
MX @ mail.example.com
# DB - DNS Only
A db 192.0.2.5 (灰色云朵)获取真实访问 IP
Proxy 模式下获取真实 IP
当使用 Proxy 模式时,源站看到的 IP 是 Cloudflare 的 IP。获取真实访问 IP 的方法:
方法 1: 查看请求头
javascript
// Express.js
app.get('/', (req, res) => {
const realIP = req.headers['cf-connecting-ip'] ||
req.headers['x-forwarded-for'];
console.log('Real IP:', realIP);
});php
// PHP
$realIP = $_SERVER['HTTP_CF_CONNECTING_IP'] ??
$_SERVER['HTTP_X_FORWARDED_FOR'];
echo "Real IP: $realIP";python
# Python Flask
from flask import request
@app.route('/')
def index():
real_ip = request.headers.get('CF-Connecting-IP') or \
request.headers.get('X-Forwarded-For')
return f"Real IP: {real_ip}"nginx
# Nginx
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;
# ... 更多 Cloudflare IP 段
real_ip_header CF-Connecting-IP;方法 2: 使用 Cloudflare IP 模块
# Nginx + ngx_http_cf_module
server {
# 自动处理 Cloudflare IP
set_real_ip_from cloudflare;
real_ip_header CF-Connecting-IP;
}Cloudflare 请求头
CF-Connecting-IP: 203.0.113.1 # 真实客户端 IP
CF-Ray: 1234567890abcde-KIX # 请求 ID
CF-IPCountry: US # 客户端国家
CF-Visitor: {"scheme":"https"} # 访问协议
CF-Worker: # Worker 路径
X-Forwarded-For: 203.0.113.1 # 转发 IP
X-Forwarded-Proto: https # 转发协议源站配置建议
接受 Cloudflare IP
nginx
# Nginx 配置
# 仅允许 Cloudflare 访问(生产环境)
allow 173.245.48.0/20;
allow 103.21.244.0/22;
allow 103.22.200.0/22;
allow 103.31.4.0/22;
allow 141.101.64.0/18;
allow 108.162.192.0/18;
allow 190.93.240.0/20;
allow 188.114.96.0/20;
allow 197.234.240.0/22;
allow 198.41.128.0/17;
allow 162.158.0.0/15;
allow 104.16.0.0/13;
allow 104.24.0.0/14;
allow 172.64.0.0/13;
allow 131.0.72.0/22;
deny all;保持 DNS Only 端口公开
nginx
# DNS Only 服务可以限制访问
# 例如 FTP
allow 203.0.113.0/24; # 特定 IP
deny all;混合模式最佳实践
推荐配置
# 公开 Web - Proxy (橙色)
A @ 192.0.2.1 (橙色云朵)
A www 192.0.2.1 (橙色云朵)
# API - Proxy (橙色)
A api 192.0.2.2 (橙色云朵)
# 静态资源 - Proxy (橙色)
A cdn 192.0.2.3 (橙色云朵)
# 邮件 - DNS Only (灰色)
A mail 192.0.2.4 (灰色云朵)
MX @ mail.example.com
# FTP - DNS Only (灰色)
A ftp 192.0.2.5 (灰色云朵)
# 开发环境 - DNS Only (灰色)
A dev 192.0.2.6 (灰色云朵)安全建议
- 所有公开 Web 服务 使用 Proxy 模式
- 邮件服务器 (MX) 使用 DNS Only
- 非标准端口服务 使用 DNS Only
- 内部工具 使用 DNS Only + IP 白名单
- 生产 API 使用 Proxy 模式
- 开发环境 使用 DNS Only 或独立子域名
故障排查
Proxy 模式无法访问
问题: 开启 Proxy 后网站无法访问
排查步骤:
- 检查源站是否支持 HTTP/HTTPS
- 确认源站端口是否为 Cloudflare 支持的端口
- 检查源站防火墙是否阻止 Cloudflare IP
- 验证 SSL/TLS 配置是否正确
DNS Only 无法访问
问题: DNS 无法解析
排查步骤:
- 检查 DNS 记录是否正确
- 等待 DNS 传播 (最多 24-48 小时)
- 使用
dig或nslookup验证 - 检查源站服务是否运行
切换模式后无法访问
问题: 切换模式后出现 520/521/522 错误
排查步骤:
520 = Web 服务器返回未知错误
521 = Web 服务器拒绝连接
522 = 连接超时
523 = 源站不可达
525 = SSL 握手失败
526 = 无效的 SSL 证书解决方案:
- 检查源站服务状态
- 验证 SSL 证书
- 检查防火墙规则
- 确认端口监听状态