努力
加油

新手如何将微信小程序连接到腾讯云CVM实例?

先把几个核心概念理顺,不然新手很容易在“网络不通”这个坑里卡很久。

微信小程序跑在微信客户端里,它不能直接连接你服务器上的某个私有 IP 端口(比如 192.168.x.x 或者腾讯云 CVM 的内网 IP)。小程序发起的请求必须是公网可访问的 HTTPS 接口。

所以,所谓的“连接”,本质上是:小程序前端 -> 互联网 -> 腾讯云 CVM 公网 IP -> 后端服务。

下面按实际操作步骤,把这条链路打通。

第一步:CVM 实例准备与环境配置

别一上来就写代码,先保证服务器能“听”到外面的声音。

  1. 安全组放行
    这是新手最容易忽略的地方。登录腾讯云控制台,找到你的 CVM 实例,查看“安全组”设置。

    • 入方向规则必须允许 TCP 协议。
    • 如果你后端用 Node.js (默认 3000)、Python Flask/Django (默认 8000) 或 Java Spring Boot (默认 8080),记得把对应端口加进去。
    • 建议:为了演示方便,可以先临时开一个 80 或 443 端口测试连通性,确认通了再根据实际业务调整。
  2. 安装运行环境
    假设你用最常见的 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
  3. 编写极简后端服务
    在服务器上创建一个文件 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 并测试连通性

  1. 获取公网 IP
    回到腾讯云控制台,复制 CVM 的“公网 IP”地址。如果没有分配公网 IP,你需要去控制台申请一个弹性公网 IP (EIP) 并绑定到该实例。

  2. 本地验证
    在你的电脑浏览器或 Postman 中访问:
    http://<你的CVM公网IP>:3000/api/hello

    如果返回 JSON 数据,说明服务器端没问题,网络通路已建立。
    如果超时或拒绝连接,回去检查安全组和防火墙(iptables/firewalld)。

第三步:微信小程序配置域名(最关键的一步)

微信对安全性要求极高,不支持 IP 直连,也不支持 HTTP 明文传输。你必须有一个备案过的域名。

  1. 域名备案
    确保你的域名已经在工信部完成备案,且备案主体与腾讯云账号一致。未备案域名无法添加为服务器域名。

  2. 解析域名
    在腾讯云 DNSPod 或其他 DNS 服务商处,将域名 A 记录指向你的 CVM 公网 IP。
    例如:api.yourdomain.com -> <CVM公网IP>

  3. 小程序后台配置
    登录 微信公众平台:

    • 进入“开发” -> “开发管理” -> “开发设置”。
    • 找到“服务器域名”板块。
    • 在 “请求合法域名” 中添加你的域名,如 https://api.yourdomain.com。
    • 注意:这里只能填域名,不能填 IP;只能填 HTTPS,不能填 HTTP。

第四步:HTTPS 证书配置(强制要求)

既然小程序只认 HTTPS,你的 CVM 就必须提供有效的 SSL 证书。

  1. 获取证书
    可以在腾讯云控制台“SSL 证书”管理中免费申请一张 DV 证书,或者使用 Let’s Encrypt 自动签发。下载 Nginx 版本的证书文件(.crt 和 .key)。

  2. 配置 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)
  }
})

点击“真机调试”或“预览”,用手机扫码测试。如果能看到日志输出,恭喜你,链路彻底打通。

常见踩坑指南(避坑必看)

  1. localhost vs 0.0.0.0
    在 Node.js 监听时,务必使用 app.listen(PORT, '0.0.0.0') 而不是默认的 localhost (127.0.0.1)。监听 localhost 意味着只接受来自服务器本机的请求,外部 Nginx 转发过来的请求会被拒之门外。

  2. 域名格式错误
    小程序后台配置的域名,不要带 http:// 或 https://,也不要带末尾斜杠 /。只填纯域名,如 api.yourdomain.com。

  3. CDN 提速的陷阱
    如果你给域名加了 CDN 提速,确保 CDN 回源配置正确,并且 CDN 节点已经缓存了你的证书。有时候 CDN 配置滞后会导致证书报错。

  4. XX误区
    有些新手会用 frp 或 ngrok 做XX来测试。这在开发阶段可以用,但严禁用于生产环境的小程序上线。微信审核时会检测域名归属和安全策略,非正规备案域名的穿透服务大概率无法通过审核或被封禁。

  5. CORS 问题
    虽然我们在后端加了 CORS 头,但在小程序端,wx.request 本身是遵循同源策略的,只要域名配对了,通常不需要额外处理前端跨域。但如果涉及复杂的前后端分离架构,确保后端返回的 Header 包含 Access-Control-Allow-Origin: https://your-miniprogram-domain.com(具体域名需看小程序绑定的业务域名)。

总结下来,流程就是:CVM 装服务 -> 安全组开端口 -> 域名解析到 IP -> 配置 HTTPS 证书 -> Nginx 反代 -> 小程序后台配域名 -> 前端发请求。每一步都缺一不可,尤其是 HTTPS 和域名备案,这是微信生态的硬门槛。