国内云服务器只对 80/443 端口强制 ICP 备案检测,非标准端口(如
8443)不受限。利用 Cloudflare 支持回源到非标准 HTTPS
端口的特性,即可在未备案的情况下通过
https://api1.example.com:8443 访问源站服务。
原理
1
| 用户 → Cloudflare(CDN 边缘节点)→ 腾讯云源站:8443
|
- 云厂商只检测 80/443,8443 等非标准端口不触发备案拦截。
- CF 免费版默认支持回源到 8443、2083、2053 等非标准 HTTPS 端口。
- 源站用自签名证书 + CF Full 加密模式即可回源,无需
CA 证书。
- 访问 URL 必须带端口号,CF 回源端口与 URL 端口一致。
第一步:腾讯云(源站)
1. 放行安全组
控制台 → 实例 → 安全组,添加入站规则:TCP / 8443 /
0.0.0.0/0(后续可收紧为 CF IP 段,见第四步)。
2. 生成自签名证书
1 2 3 4 5 6 7 8 9
| sudo mkdir -p /etc/nginx/ssl cd /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ -keyout /etc/nginx/ssl/selfsigned.key \ -out /etc/nginx/ssl/selfsigned.crt \ -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/CN=example.com" \ -addext "subjectAltName=DNS:api1.example.com,DNS:api2.example.com"
|
验证 SAN 是否包含所有子域名:
1 2
| openssl x509 -in /etc/nginx/ssl/selfsigned.crt -text -noout | grep DNS
|
3. 配置 Nginx 反向代理
编辑
/etc/nginx/conf.d/yourdomain.conf,以两个子域名分别反代到本地
11025、11026 为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| server { listen 8443 ssl; server_name api1.example.com;
ssl_certificate /etc/nginx/ssl/selfsigned.crt; ssl_certificate_key /etc/nginx/ssl/selfsigned.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on;
client_max_body_size 50M;
location / { proxy_pass http://127.0.0.1:11025; proxy_http_version 1.1; 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;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";
proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; } }
server { listen 8443 ssl; server_name api2.example.com;
ssl_certificate /etc/nginx/ssl/selfsigned.crt; ssl_certificate_key /etc/nginx/ssl/selfsigned.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on;
client_max_body_size 50M;
location / { proxy_pass http://127.0.0.1:11026; proxy_http_version 1.1; 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;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";
proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; } }
|
测试并重载:
1 2
| sudo nginx -t sudo systemctl reload nginx
|
第二步:Cloudflare
1. 添加 DNS 记录并开启代理
DNS → Records,为每个子域名添加 A 记录:Name
填子域名前缀(如 api1),IPv4 填腾讯云公网 IP,Proxy status
保持橙色云开启。
2. 设置 SSL/TLS 加密模式(关键)
SSL/TLS → Overview,加密模式设为
Full:
- 不能选 Full
(Strict):严格校验会导致自签名证书回源失败(526 错误)。
- 不能选 Flexible:CF 到源站退化为
HTTP,失去该段加密。
3. 确认端口支持(可选)
Network → Custom ports for HTTPS,确认 8443
在支持列表中(默认开启)。
第三步:验证与排错
浏览器访问
https://你的腾讯云IP:8443,忽略证书警告继续前往,能看到网站内容即源站配置成功;再通过
https://api1.example.com:8443 验证完整链路。
常见问题:
- 526:加密模式误设为 Full (Strict),改为 Full。
- 超时:安全组或系统防火墙(iptables/firewalld)未放行
8443。
- 502:后端服务未启动或端口不对。
第四步:防止源站 IP
泄露(进阶)
CF 代理不能阻止别人扫到源站 IP 后直接访问 8443。推荐开启
Authenticated Origin Pulls,只允许 CF 回源:
- CF 控制台 SSL/TLS → Origin Server,开启
Authenticated Origin Pulls。
- 下载 CF 客户端 CA 证书(
origin-pull-ca.pem)放到
/etc/nginx/ssl/。
- Nginx 配置中添加:
1 2 3
| ssl_client_certificate /etc/nginx/ssl/origin-pull-ca.pem; ssl_verify_client on;
|
此后直接通过 IP 访问会被 Nginx 拒绝(400 错误),彻底隐藏源站。
总结
- 核心思路:非标准端口避开备案检测 + Cloudflare Full
模式兼容自签名证书。
- 三个要点:安全组放行 8443 → Nginx 监听 8443 + 自签名证书 → CF 橙色云
+ Full 模式。
- 上线后建议开启 Authenticated Origin Pulls 保护源站。