在腾讯云轻量应用服务器(Lighthouse)上部署后端并让微信小程序成功连接,核心在于网络可达性、域名配置以及微信接口规范。以下是完整的实施步骤和关键注意事项:
1. 基础环境准备与网络配置
微信小程序的 request 请求必须使用 HTTPS 协议,且域名必须经过备案。
A. 购买并解析域名
- 购买域名:在腾讯云控制台购买一个域名(如
yourdomain.com)。 - ICP 备案:这是最关键的一步。中国大陆地区的服务器必须完成 ICP 备案。如果未备案,域名无法解析到国内服务器,或者被防火墙拦截。
- DNS 解析:将域名的 A 记录解析到你轻量服务器的公网 IP 地址。
B. 配置轻量服务器安全组
登录腾讯云控制台 -> 轻量应用服务器 -> 点击实例 -> 防火墙(安全组)。
你需要放行以下端口:
- 80 (HTTP):用于域名验证(Let’s Encrypt 申请证书时通常需要)或重定向。
- 443 (HTTPS):小程序正式通信必须端口。
- 你的后端服务端口:例如 Node.js 默认 3000,Java 默认 8080,Go 默认 8080 等。注意:通常建议只开放 80/443,通过 Nginx 反向X_X转发到内部端口,不要直接暴露业务端口给公网。
2. 部署 HTTPS 证书
微信小程序强制要求 HTTPS。你有两种主要方式获取证书:
-
方案一:使用 Let’s Encrypt (免费,推荐)
在服务器上安装 Certbot,自动申请并配置 Nginx。# 示例命令 (以 Ubuntu 为例) sudo apt update sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d yourdomain.comCertbot 会自动修改 Nginx 配置并重启服务。
-
方案二:上传自有证书
如果你有购买的商业证书,将.crt和.key文件上传到服务器,并在 Nginx 中配置。
3. 配置 Nginx 反向X_X (最佳实践)
不要直接在代码中监听业务端口,而是通过 Nginx 统一处理 HTTPS 和静态资源。
编辑 Nginx 配置文件 (/etc/nginx/sites-available/default 或自定义文件):
server {
listen 443 ssl;
server_name yourdomain.com;
# SSL 证书路径 (如果是 Let's Encrypt)
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
# 其他 SSL 优化配置...
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_pass http://127.0.0.1:3000; # 假设你的后端运行在 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;
# 如果需要 WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
# HTTP 自动跳转 HTTPS
server {
listen 80;
server_name yourdomain.com;
return 301 https://$server_name$request_uri;
}
配置完成后执行 sudo nginx -t 测试,然后 sudo systemctl reload nginx 生效。
4. 微信小程序端配置
A. 后台添加合法域名
- 登录 微信公众平台。
- 进入 开发 -> 开发管理 -> 开发设置。
- 找到 “服务器域名” 板块。
- 在 request 合法域名 中添加你的域名:
https://yourdomain.com。- 注意:必须包含
https://前缀,且不能带端口号(除非是特殊配置,但通常建议不带)。
- 注意:必须包含
- 保存后,该域名可能需要等待几分钟审核生效。
B. 前端代码调用
在小程序代码中发起请求:
// app.js 或具体页面逻辑
wx.request({
url: 'https://yourdomain.com/api/user/login', // 必须是 HTTPS
method: 'POST',
data: {
username: 'test',
password: '123456'
},
header: {
'content-type': 'application/json'
},
success(res) {
console.log('后端返回:', res.data);
if (res.statusCode === 200) {
// 处理成功逻辑
} else {
wx.showToast({ title: '请求失败', icon: 'none' });
}
},
fail(err) {
console.error('网络错误:', err);
// 常见错误排查:
// 1. 域名未在后台配置
// 2. 非 HTTPS 协议
// 3. 域名不匹配 (localhost 无法在真机调试)
}
});
5. 常见问题排查清单
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 报错:request fail: invalid domain | 域名未填写或未生效 | 检查微信公众平台“服务器域名”是否已添加且审核通过;检查 DNS 解析是否生效。 |
| 报错:SSL 握手失败 | 证书过期或配置错误 | 检查 Nginx 中的证书路径是否正确;尝试重新申请 Let’s Encrypt 证书。 |
| 真机调试正常,模拟器报错 | 本地调试习惯 | 确保 url 写的是真实域名,而不是 localhost 或 127.0.0.1。 |
| 跨域问题 (CORS) | 后端未允许跨域 | 虽然小程序不需要 CORS,但如果涉及浏览器预览需配置;若后端框架(如 Spring, Express)有严格限制,请确认 Access-Control-Allow-Origin 设置。 |
| 连接超时 | 安全组未放行 | 检查轻量服务器防火墙,确保 443 端口对 0.0.0.0/0 开放。 |
总结流程
- 域名备案 (必须)。
- DNS 解析 到服务器 IP。
- 申请 HTTPS 证书 (Let’s Encrypt)。
- Nginx 配置 反向X_X + SSL。
- 微信后台 添加
request合法域名。 - 小程序代码 调用
https://域名。
按照以上步骤操作,即可实现稳定的连接。如果在配置过程中遇到具体的报错信息,可以提供日志以便进一步分析。
CLOUD技术笔记