背景与需求

在国内服务器场景中,直接使用80/443端口需备案,而某些特殊服务(如内网穿透、非标端口应用)需通过其他端口暴露服务。Cloudflare作为全球CDN服务商,不仅能加速访问,还能通过代理和隧道技术实现非标端口的域名访问,同时提供SSL加密和DDoS防护。本文介绍两种主流方案:反向代理+Origin RulesCloudflare 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/TLSHTTPS(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。


关键注意事项

  1. 端口限制:Cloudflare免费版仅代理部分端口(如HTTP的80、8080、2052;HTTPS的443、8443等),需选择支持的端口。

  2. SSL设置

    • 方案一中需为源站配置SSL证书(可自签名或使用Cloudflare Origin CA)。

    • 方案二中Cloudflare自动提供边缘证书,源站无需额外配置39

  3. 性能优化:若国内访问延迟高,可通过CloudflareSpeedTest优选IP,或结合SAAS服务实现加速6


方案对比

方案

适用场景

优点

缺点

反向代理+Origin Rules

有公网IP,需自定义端口

灵活支持复杂服务

需维护SSL证书和服务器

Cloudflare Tunnel

无公网IP,快速部署内网穿透

无需开放端口,安全性高

免费版带宽受限