小程序连接腾讯云轻量服务器时无法访问 API,常见于网络配置、安全组、HTTPS 限制等问题。以下是详细的排查和解决步骤:
🔍 一、检查网络连通性
-
确认服务器公网 IP 是否正确
- 登录腾讯云控制台 → 轻量应用服务器 → 查看实例的「公网 IP」。
- 在本地用
ping 公网IP测试是否能通(注意:部分服务器禁 ping,但不影响实际通信)。
-
测试端口是否开放
telnet 公网IP 端口号 # 例如: telnet 123.123.123.123 8080如果连接失败,可能是防火墙或安全组未放行。
🔐 二、检查腾讯云安全组设置
这是最常见的问题!
-
登录腾讯云控制台 → 轻量应用服务器 → 找到你的实例 → 「防火墙」或「安全组」。
-
确保已添加规则允许外部访问你的 API 端口(如 80、443、8080 等)。
✅ 正确配置示例:
- 协议类型:TCP
- 端口:80 / 443 / 8080(根据你的服务)
- 源 IP:0.0.0.0/0(允许所有 IP 访问,生产环境建议限制)
- 备注:允许小程序访问 API
⚠️ 注意:轻量服务器默认只开放了部分端口(如 80、443、22),其他端口需手动添加规则。
🛠️ 三、检查服务器本地防火墙(如 iptables、ufw)
即使腾讯云安全组放行,服务器系统级防火墙也可能拦截。
-
Ubuntu/Debian 使用 ufw:
sudo ufw status sudo ufw allow 8080/tcp -
CentOS 使用 firewalld:
sudo firewall-cmd --list-ports sudo firewall-cmd --add-port=8080/tcp --permanent sudo firewall-cmd --reload
🌐 四、确保后端服务监听在正确的地址
检查你的 API 服务是否绑定到了 0.0.0.0,而不是 127.0.0.1。
错误示例(Node.js):
app.listen(8080, '127.0.0.1') // 只能本机访问
✅ 正确写法:
app.listen(8080, '0.0.0.0') // 允许外部访问
重启服务后测试:
curl http://localhost:8080/api/test
curl http://公网IP:8080/api/test
🔒 五、小程序要求 HTTPS 和域名(关键!)
⚠️ 微信小程序不允许使用 HTTP 请求,必须使用 HTTPS,且域名需备案并配置合法业务域名。
解决方案:
-
使用 HTTPS 域名
- 申请一个域名(如
api.yourdomain.com),并在腾讯云完成 ICP 备案。 - 为域名申请 SSL 证书(可使用腾讯云免费证书或 Let’s Encrypt)。
- 配置 Nginx 反向X_X + HTTPS,将请求转发到你的 API 服务。
- 申请一个域名(如
-
配置 Nginx 示例(HTTPS)
server { listen 443 ssl; server_name api.yourdomain.com; ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } -
在小程序管理后台配置 request 合法域名
- 登录 微信公众平台
- 设置 → 开发管理 → 开发者ID → 「request 合法域名」中添加:
https://api.yourdomain.com
🧪 六、调试技巧
-
在手机上打开小程序调试模式
- 小程序右上角「…」→ 调试 → 查看 network 请求是否报错(如 net::ERR_CERT_AUTHORITY_INVALID、404、403 等)。
-
使用在线工具测试 API
- 浏览器访问:
https://api.yourdomain.com/test,看是否能返回数据。
- 浏览器访问:
-
查看服务器日志
# Node.js 日志 pm2 logs # 或查看 nginx 错误日志 tail -f /var/log/nginx/error.log
✅ 总结:常见原因与解决方案
| 问题 | 解决方法 |
|---|---|
| 安全组未放行端口 | 在腾讯云控制台添加 TCP 规则 |
| 服务未监听 0.0.0.0 | 修改代码绑定到 0.0.0.0 |
| 小程序使用 HTTP | 必须改用 HTTPS 域名 |
| 域名未加入合法域名 | 在小程序后台添加 request 域名 |
| 本地防火墙拦截 | 关闭或放行对应端口 |
| 服务未启动 | ps aux | grep node 检查进程 |
如果你提供具体错误信息(如小程序报错内容、API 地址、端口、是否用了 HTTPS 等),我可以给出更精准的建议。
云小栈