背景与需求
在国内服务器场景中,直接使用80/443端口需备案,而某些特殊服务(如内网穿透、非标端口应用)需通过其他端口暴露服务。Cloudflare作为全球CDN服务商,不仅能加速访问,还能通过代理和隧道技术实现非标端口的域名访问,同时提供SSL加密和DDoS防护。本文介绍两种主流方案:反向代理+Origin Rules与Cloudflare Tunnel,并分析其适用场景。
方案一:反向代理 + Origin Rules(适用于有公网IP的服务器)
1. 配置反向代理(以Nginx为例)
通过Nginx将非标端口服务代理到Cloudflare支持的端口(如443),并配置SSL证书实现加密通信。
核心配置示例:
nginx
复制
server {
listen 8666 ssl; # 非标端口(如8666)
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:8888; # 实际服务端口
proxy_set_header Host $host;
}
}
需确保Nginx监听的非标端口在服务器防火墙中开放10。
2. Cloudflare DNS与Origin Rules设置
DNS配置:在Cloudflare中添加A记录指向服务器IP,并启用代理(小云朵点亮)。
Origin Rules:创建规则,将请求重写至Nginx监听的非标端口(如8666)。例如:
匹配条件:
SSL/TLS
为HTTPS
(Cloudflare到服务器的通信加密)。重写端口为
8666
。
3. 访问流程
用户访问https://example.com
→ Cloudflare代理至服务器8666端口 → Nginx转发至本地8888端口服务。
方案二:Cloudflare Tunnel(无需公网IP)
通过Cloudflare Tunnel(基于cloudflared
工具)直接打通内网与Cloudflare边缘节点,无需配置端口转发或暴露公网IP,适合家庭宽带或无公网IP的场景511。
1. 部署Cloudflared
bash
复制
# Docker部署示例
docker run -d --name cloudflared cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <YOUR_TOKEN>
从Cloudflare Zero Trust控制台获取隧道Token,并绑定域名911。
2. 配置公网域名映射
在Tunnel的Public Hostnames中设置:
子域名:如
nas.example.com
服务类型:HTTP/HTTPS
目标地址:内网服务地址(如
http://192.168.1.100:5000
)
3. 泛域名解析(可选)
通过CNAME记录将*.example.com
解析至隧道UUID,结合Nginx Proxy Manager(NPM)实现动态子域名转发9:
yaml
复制
# cloudflared config.yaml示例
ingress:
- hostname: "*.example.com"
service: http://npm:2080 # NPM监听端口
4. 访问流程
用户访问https://nas.example.com
→ Cloudflare Tunnel直连内网服务 → 无需暴露端口或公网IP。
关键注意事项
端口限制:Cloudflare免费版仅代理部分端口(如HTTP的80、8080、2052;HTTPS的443、8443等),需选择支持的端口。
SSL设置:
方案一中需为源站配置SSL证书(可自签名或使用Cloudflare Origin CA)。
方案二中Cloudflare自动提供边缘证书,源站无需额外配置39。
性能优化:若国内访问延迟高,可通过CloudflareSpeedTest优选IP,或结合SAAS服务实现加速6。