先把几个核心概念理顺,不然新手很容易在“网络不通”这个坑里卡很久。
微信小程序跑在微信客户端里,它不能直接连接你服务器上的某个私有 IP 端口(比如 192.168.x.x 或者腾讯云 CVM 的内网 IP)。小程序发起的请求必须是公网可访问的 HTTPS 接口。
所以,所谓的“连接”,本质上是:小程序前端 -> 互联网 -> 腾讯云 CVM 公网 IP -> 后端服务。
下面按实际操作步骤,把这条链路打通。
第一步:CVM 实例准备与环境配置
别一上来就写代码,先保证服务器能“听”到外面的声音。
-
安全组放行
这是新手最容易忽略的地方。登录腾讯云控制台,找到你的 CVM 实例,查看“安全组”设置。- 入方向规则必须允许 TCP 协议。
- 如果你后端用 Node.js (默认 3000)、Python Flask/Django (默认 8000) 或 Java Spring Boot (默认 8080),记得把对应端口加进去。
- 建议:为了演示方便,可以先临时开一个 80 或 443 端口测试连通性,确认通了再根据实际业务调整。
-
安装运行环境
假设你用最常见的 Node.js + Express 做简单 Demo。SSH 连上服务器:# 更新源 yum update -y # 安装 Node.js (推荐用 nvm 管理版本,或者直接装最新版) curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash source ~/.bash_profile nvm install --lts # 验证安装 node -v npm -v -
编写极简后端服务
在服务器上创建一个文件server.js:const express = require('express'); const app = express(); const PORT = 3000; // 允许跨域(开发阶段必备,生产环境请配置具体的域名白名单) app.use((req, res, next) => { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); next(); }); app.get('/api/hello', (req, res) => { res.json({ message: "Hello from Tencent Cloud CVM!" }); }); app.listen(PORT, () => { console.log(`Server running on port ${PORT}`); });启动服务:
node server.js &(& 表示后台运行,方便你继续操作终端)。
第二步:获取公网 IP 并测试连通性
-
获取公网 IP
回到腾讯云控制台,复制 CVM 的“公网 IP”地址。如果没有分配公网 IP,你需要去控制台申请一个弹性公网 IP (EIP) 并绑定到该实例。 -
本地验证
在你的电脑浏览器或 Postman 中访问:
http://<你的CVM公网IP>:3000/api/hello如果返回 JSON 数据,说明服务器端没问题,网络通路已建立。
如果超时或拒绝连接,回去检查安全组和防火墙(iptables/firewalld)。
第三步:微信小程序配置域名(最关键的一步)
微信对安全性要求极高,不支持 IP 直连,也不支持 HTTP 明文传输。你必须有一个备案过的域名。
-
域名备案
确保你的域名已经在工信部完成备案,且备案主体与腾讯云账号一致。未备案域名无法添加为服务器域名。 -
解析域名
在腾讯云 DNSPod 或其他 DNS 服务商处,将域名 A 记录指向你的 CVM 公网 IP。
例如:api.yourdomain.com-><CVM公网IP> -
小程序后台配置
登录 微信公众平台:- 进入“开发” -> “开发管理” -> “开发设置”。
- 找到“服务器域名”板块。
- 在 “请求合法域名” 中添加你的域名,如
https://api.yourdomain.com。 - 注意:这里只能填域名,不能填 IP;只能填 HTTPS,不能填 HTTP。
第四步:HTTPS 证书配置(强制要求)
既然小程序只认 HTTPS,你的 CVM 就必须提供有效的 SSL 证书。
-
获取证书
可以在腾讯云控制台“SSL 证书”管理中免费申请一张 DV 证书,或者使用 Let’s Encrypt 自动签发。下载 Nginx 版本的证书文件(.crt和.key)。 -
配置 Nginx
不要直接用 Node.js 暴露端口给公网,太危险且性能差。装 Nginx 做反向XX。安装 Nginx:
yum install nginx -y编辑配置文件
/etc/nginx/conf.d/default.conf或新建一个 vhost 文件:server { listen 443 ssl; server_name api.yourdomain.com; # 替换为你的域名 ssl_certificate /path/to/your/cert.crt; # 证书路径 ssl_certificate_key /path/to/your/key.key; # 私钥路径 location / { proxy_pass http://127.0.0.1:3000; # 转发给本地的 Node.js 服务 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } # 可选:强制 HTTP 跳转 HTTPS server { listen 80; server_name api.yourdomain.com; return 301 https://$server_name$request_uri; }重启 Nginx:
systemctl restart nginx现在,通过
https://api.yourdomain.com/api/hello应该也能拿到数据了。
第五步:小程序前端调用
打开微信开发者工具,创建一个小项目。在 app.js 或任意页面逻辑中发起请求:
wx.request({
url: 'https://api.yourdomain.com/api/hello', // 必须是你在后台配置的域名
method: 'GET',
header: {
'content-type': 'application/json'
},
success(res) {
console.log('成功:', res.data)
// 输出: { message: "Hello from Tencent Cloud CVM!" }
},
fail(err) {
console.error('失败:', err)
}
})
点击“真机调试”或“预览”,用手机扫码测试。如果能看到日志输出,恭喜你,链路彻底打通。
常见踩坑指南(避坑必看)
-
localhost vs 0.0.0.0
在 Node.js 监听时,务必使用app.listen(PORT, '0.0.0.0')而不是默认的localhost(127.0.0.1)。监听 localhost 意味着只接受来自服务器本机的请求,外部 Nginx 转发过来的请求会被拒之门外。 -
域名格式错误
小程序后台配置的域名,不要带http://或https://,也不要带末尾斜杠/。只填纯域名,如api.yourdomain.com。 -
CDN 提速的陷阱
如果你给域名加了 CDN 提速,确保 CDN 回源配置正确,并且 CDN 节点已经缓存了你的证书。有时候 CDN 配置滞后会导致证书报错。 -
XX误区
有些新手会用 frp 或 ngrok 做XX来测试。这在开发阶段可以用,但严禁用于生产环境的小程序上线。微信审核时会检测域名归属和安全策略,非正规备案域名的穿透服务大概率无法通过审核或被封禁。 -
CORS 问题
虽然我们在后端加了 CORS 头,但在小程序端,wx.request本身是遵循同源策略的,只要域名配对了,通常不需要额外处理前端跨域。但如果涉及复杂的前后端分离架构,确保后端返回的 Header 包含Access-Control-Allow-Origin: https://your-miniprogram-domain.com(具体域名需看小程序绑定的业务域名)。
总结下来,流程就是:CVM 装服务 -> 安全组开端口 -> 域名解析到 IP -> 配置 HTTPS 证书 -> Nginx 反代 -> 小程序后台配域名 -> 前端发请求。每一步都缺一不可,尤其是 HTTPS 和域名备案,这是微信生态的硬门槛。
云技术博客