微信小程序接入腾讯云服务器进行后端部署,核心逻辑其实就三步:搭建环境 -> 配置域名白名单 -> 代码联调。
很多新手容易卡在“域名备案”和“HTTPS证书”这两个环节,导致前端请求一直报错。下面我把从0到1的实操流程拆解清楚,避开那些虚头巴脑的概念,直接讲干货。
第一步:基础设施准备(云资源层面)
在写代码之前,你得先有地方跑你的服务。
-
购买云服务器(CVM)
- 推荐选择轻量应用服务器(适合个人/中小项目,带宽固定,管理简单)或者标准型CVM(适合高并发、复杂架构)。
- 系统镜像首选 Ubuntu 20.04/22.04 LTS 或 CentOS 7/8。国内开发者用 CentOS 比较多,但 Ubuntu 的软件包更新更友好,看个人习惯。
- 关键点:安全组必须放行端口。如果你用 Nginx,默认是 80;如果用 Node.js 自定义端口,记得在腾讯云控制台的安全组里添加入方向规则,协议 TCP,端口填你用的那个(比如 3000, 8080 等),源地址设为
0.0.0.0/0。
-
域名与备案(最耗时的一步)
- 微信小程序强制要求后端接口必须是 HTTPS,且域名必须在工信部备案。
- 如果你还没有域名,去腾讯云注册一个(推荐
.com或.cn)。 - 完成域名注册后,立即提交ICP备案。现在腾讯云支持在线备案,大概需要 1-20 个工作日不等。没有备案号,小程序后台根本加不上你的域名。
-
SSL 证书(HTTPS 保障)
- 备案通过后,去腾讯云控制台申请免费的 SSL 证书(DV 单域名证书即可,免费够用)。
- 申请通过后,下载对应服务器系统的证书文件(Nginx 版通常包含
.crt和.key两个文件)。 - 将证书上传到你的服务器
/etc/nginx/ssl/目录下(路径自定)。
第二步:服务器端部署(后端环境)
这里以最常见的 Node.js (Express/NestJS) 或 Python (Flask/Django) 为例,原理通用。假设我们用 Nginx 做反向XX。
1. 安装基础环境
SSH 登录服务器:
# Ubuntu 示例
sudo apt update
sudo apt install nginx nodejs npm python3-pip -y
2. 部署后端代码
把你的后端代码推送到服务器(Git clone 或 SCP 上传),然后安装依赖并启动。
cd /your/project/path
npm install # 或 pip install -r requirements.txt
node app.js # 确保服务在本地监听,比如 localhost:3000
注意:开发阶段建议用 PM2 守护进程,防止进程挂了没人知道。
3. 配置 Nginx(关键步骤)
创建 Nginx 配置文件 /etc/nginx/sites-available/yourdomain.com:
server {
listen 80;
server_name your-domain.com www.your-domain.com;
# HTTP 自动跳转 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name your-domain.com www.your-domain.com;
# SSL 证书路径
ssl_certificate /etc/nginx/ssl/your-domain.crt;
ssl_certificate_key /etc/nginx/ssl/your-domain.key;
# 安全相关设置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
# 反向XX到你的 Node/Python 服务
proxy_pass http://127.0.0.1:3000;
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;
# 允许跨域(如果前端不是同域)
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,user-agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
}
}
保存后,软链接启用配置并重启 Nginx:
sudo ln -s /etc/nginx/sites-available/your-domain.com /etc/nginx/sites-enabled/
sudo nginx -t # 检查语法
sudo systemctl restart nginx
此时,访问 https://your-domain.com 应该能正常返回后端数据了。
第三步:微信小程序后台配置
这是最容易出错的地方,因为微信对域名校验非常严格。
-
登录微信公众平台 (mp.weixin.qq.com)
-
进入 开发管理 -> 开发设置。
-
找到 服务器域名 区域。
-
点击修改 request合法域名。
-
填入你刚刚配置的域名,例如
https://www.your-domain.com。- 注意:
- 必须带
https://前缀。 - 不要带端口号(Nginx 统一处理 443 端口)。
- 如果是子域名,主域名和子域名都要分别添加(除非你用了通配符证书且配置得当,但微信后台通常要求精确匹配)。
- 点击“保存”,系统会下发一个 txt 记录到 DNS,你需要去域名解析服务商那里添加这条验证记录。
- 必须带
- 注意:
-
如果有文件上传需求,还需要配置 uploadFile合法域名 和 downloadFile合法域名,同样填写该域名。
第四步:前端代码联调与避坑
在微信开发者工具中编写请求代码:
wx.request({
url: 'https://www.your-domain.com/api/data', // 必须是你后台配置的域名
method: 'POST',
header: {
'content-type': 'application/json'
},
data: {
key: 'value'
},
success(res) {
console.log(res.data);
},
fail(err) {
console.error(err);
// 常见错误排查:
// 1. request:fail url not in domain list -> 域名没配好或没备案
// 2. net::ERR_CERT_COMMON_NAME_INVALID -> 证书域名不匹配
// 3. cors policy -> 后端 Nginx 没加跨域头
}
})
常见问题排查清单(Debug Checklist)
-
“不在以下 request 合法域名列表中”
- 检查:是否加了
https://?是否带了端口?是否真的添加了子域名?DNS 验证记录是否生效? - 技巧:在开发者工具右上角“详情”->“本地设置”中,勾选“不校验合法域名…”,可以临时绕过此限制用于调试,但上线前必须关掉。
- 检查:是否加了
-
“SSL 握手失败”或“证书错误”
- 检查:Nginx 里的证书路径是否正确?私钥和公钥是否配对?
- 检查:浏览器直接访问域名看是否有红叉,如果浏览器都打不开,小程序肯定不行。
-
403 Forbidden 或 502 Bad Gateway
- 403:通常是 Nginx 权限问题或后端服务没启动。
- 502:Nginx 能连上,但后端服务挂了或没在监听指定端口。检查
netstat -tulnp | grep 3000。
-
跨域问题 (CORS)
- 微信小程序发起的请求,如果后端是独立域名,必须处理 CORS。我在 Nginx 配置里已经加了
Access-Control-Allow-Origin,确保后端框架(如 Express 的 cors 模块)没有冲突覆盖。
- 微信小程序发起的请求,如果后端是独立域名,必须处理 CORS。我在 Nginx 配置里已经加了
总结
流程就是:买云主机 -> 买域名 -> 备案 -> 下证书 -> 装 Nginx+后端 -> 配 HTTPS -> 微信后台加域名 -> 前端请求。
整个过程最大的时间成本在于 ICP 备案,建议尽早提交。技术实现上,只要 Nginx 的反向XX和证书配置无误,基本不会有大问题。对于小规模项目,也可以考虑直接使用 腾讯云 SCF(Serverless 云函数) + API 网关,这样连服务器运维和证书配置都省了,API 网关会自动处理 HTTPS 和域名绑定,更适合现代微服务架构的小程序后端。
云技术博客