入手了国内云服务器(如腾讯云、阿里云),准备部署个人站点或跑接入大模型的 AI 机器人。结果刚把代码传上去,就撞上了两堵物理网络高墙:
-
第一堵墙:外面的人进不来(建站卡死)。 没有繁琐的域名备案,云服务商在机房底层直接焊死了 80 和 443 端口。就算你放行了安全组,自己用手机访问域名也是白屏。
-
第二堵墙:里面的人出不去(API 接口卡死)。 运行 Python 脚本请求 Telegram 机器人或 Gemini API 时,满屏红字超时报错。这是因为国内出站流量被拦截,同时海外平台又主动拒绝了大陆 IP。
难道服务器只能吃灰? 其实,通过 Cloudflare 免费的企业级网络组件,这台国内机器完全可以复活。
点亮 DNS 的“橙色小云朵”

在正式开始打洞和写代码之前,把你的域名 DNS 托管给 Cloudflare。
-
第一步:移交指挥权。 去你买域名的地方(腾讯云/阿里云),把域名的 DNS 服务器(NS记录)改成 Cloudflare 提供的地址。
-
第二步:认准橙色小云朵。 当你在 CF 后台配置代理子域名时,DNS 列表里会出现一条记录,右边有一朵云。记住,一定要让它变成橙色(Proxied 状态)! 意味着所有访问这个域名的流量,都会先被吸进 Cloudflare 的海外清洗池里。只有在这里,我们的 Worker 代码才能拦截并重写目标地址,我们的 Tunnel 才能把流量悄悄送进国内服务器。如果云朵是灰色的(DNS Only),那所有的隐藏和代理全部失效,你的国内服务器 IP就直接暴露在防火墙面前了。
破局一:Cloudflare Tunnel 隧道穿透入站审查
云服务器主动出网 -> CF 节点 <- 外部用户访问
针对没备案无法暴露端口的问题,我们需要彻底抛弃传统的“开门等客”建站思维,转用 Cloudflare Tunnel 挖一条“反向地道”。
-
反向穿透逻辑:我们在服务器内部署一个极轻量的守护进程(
cloudflared)。它启动后,会主动向海外的 CF 节点发起连接。因为是由内向外发的正常请求,机房防火墙默认全量放行。 -
流量回送:握手成功后,双方建立起一条持久的加密隧道。此时,外部用户访问你的域名,请求先到达 CF 节点,CF 顺着这条隧道,将流量直接安全注入到服务器内部的端口。
-
优势:不需要公网 IP,不暴露任何服务器端口。既绕过了机房的入站审查,又实现了绝对的防黑客扫描和防 DDoS 攻击。
核心密钥:那串超长的 Tunnel Token 是什么?
在配置隧道时,系统会生成一串极长、类似乱码的 Token 字符。其实这是整条隧道的“加密核按钮”。
-
图纸与通行证的结合体:这串 Base64 编码的字符,包含了你这条专属隧道的唯一 ID 和高强度的加密握手密钥。
-
全自动鉴权:在服务器启动隧道程序时输入这串 Token,进程瞬间就能识别目标 CF 节点并完成身份核验。以前这种内网穿透需要繁琐地配置 SSL 证书文件(
.pem),现在只需要这一串 Token,极其优雅且安全。
内网接应:流量进来了,Nginx 如何指路?
隧道通了,流量顺利进入了服务器本地。如果你的服务器上既有博客系统(比如 base 域名),又有私人数据看板(比如 routine 域名),流量进门后该怎么走?这需要双层接应:
-
第一步(隧道指路):在 CF 后台设置,将不同域名的外部请求,全部通过隧道引流到服务器的本地 80 或 81 端口。
-
第二步(Nginx 接客):在服务器上配置 Nginx。当流量到达 80 端口时,Nginx 充当大堂经理,检查 HTTP 请求的域名:敲门的是
base,就把流量领去网页目录目录展示前端页面;敲门的是routine,就领去对应的工作室目录。
完成这一步,一台国内服务器就能免备案跑起无数个互相独立的 Web 服务。
破局二:反向代理打破出站 API 封锁
解决完了“进不来”,怎么解决跑脚本“连不上海外 API”的问题?不用在服务器上装高风险的代理软件,我们直接在 Cloudflare 的 Workers & Pages 里部署一个 Serverless(无服务器)代码中转站。
-
代码逻辑:当你的服务器把请求发给代理节点时,这段代码会半路拦截,用“涂改液”把目标地址强行改写为 Google 或 Telegram 的官方 API 地址,然后再帮你发出去。
-
完美绕过:官方服务器一看,请求来自 Cloudflare 的海外优质节点,立马放行。我们就这样零成本实现了数据的无损双向互通。

👇 核心代理代码(直接复制部署即可):
如果是代理 Google Gemini 大模型,新建 Worker 并贴入以下代码:
export default {
async fetch(request, env) {
const url = new URL(request.url);
// 强制替换主机名为 Google Gemini 官方 API 地址
url.hostname = 'generativelanguage.googleapis.com';
return fetch(new Request(url, request));
}
};
如果是代理 Telegram Bot API,逻辑一模一样,只需把域名换掉:
export default {
async fetch(request, env) {
const url = new URL(request.url);
// 强制替换主机名为 Telegram 官方 API 地址
url.hostname = 'api.telegram.org';
return fetch(new Request(url, request));
}
};
(💡 部署小贴士:代码部署完成后,记得在 Worker 的 Settings -> Triggers (触发器) 里,绑定一个你自己的子域名,比如 api.你的域名.com。以后你在云服务器里的代码,直接向这个子域名发请求就可以了!)
系统级环境变量解耦
最后一步是保障项目可移植性的关键规范。千万不要在 Python 业务代码里直接写死(Hardcode)我们刚刚建好的代理链接。
-
环境解耦:代码只负责处理逻辑,必须保持纯净。所有的代理 API 链接,全部提取到外部的
.env环境变量文件中进行注入配置。 -
降维打击的系统思维:未来如果你将这套服务整体打包迁移到了海外物理机(无需代理环境),你连一行 Python 源码都不用改,只需删掉
.env里的代理参数,系统就能自动无缝切换回官方直连。
Comments & Reactions