一、项目环境
- 前端:微信小程序(wx.request / wx.uploadFile)
- 后端:FastAPI(运行在内网服务,通过 Nginx 反向代理)
- 云服务器:阿里云轻量应用服务器
- 域名:腾讯云购买(已解析到服务器)
二、问题现象
在以下两个环境中均出现相同问题:
微信开发者工具 \ 微信真机(iPhone)
请求全部失败,错误如下:
request:fail
errcode:-101
cronet_error_code:-101
error_msg: net::ERR_CONNECTION_RESET
三、关键现象
1️⃣ 使用服务器公网 IP 时,一切正常
在未使用域名,仅使用:http://服务器IP:端口时:
- 小程序开发者工具正常
- 真机正常
- 所有接口可访问
2️⃣ 切换为域名 HTTPS 后,全部失败
使用:https://api2.osbornfind.top后:
- 微信开发者工具 ❌
- 微信真机 ❌
- 所有接口全部失败
3️⃣ 浏览器 / curl 正常
curlhttps://api2.osbornfind.top/返回正常
手机 Safari 访问接口也正常
4️⃣ TLS 验证正常
openssl s_client -connect
api2.osbornfind.top:443
结果:
- 证书链正常(Let's Encrypt)
- TLS1.2 握手成功
- cipher 为 ECDHE-GCM
- Verify return code: 0 (ok)
5️⃣ 请求未进入 HTTP 层
Nginx access.log:
- 可以看到浏览器 / curl 请求
- 没有任何来自小程序的业务请求
说明:请求在 TLS / 网络阶段就被中断
四、当前怀疑
问题仅在:
IP → 域名(HTTPS)切换后出现
怀疑方向:
- TLS / SNI / HTTPS 链路兼容问题
- 云服务器网络层(轻量应用服务器)对某些 TLS 请求的处理
- 微信环境对域名 HTTPS 的特殊要求
五、希望确认的问题并得到解决方案
- 腾讯云域名解析是否会影响 HTTPS 连接行为(非 CDN 场景)
- 微信小程序访问 HTTPS 时,是否对 TLS 参数或 SNI 有特殊要求
- 是否存在云服务器(轻量应用服务器)层面对 TLS 请求 reset 的情况
- 该问题是否属于 CDN 需要介入的典型场景
使用 IP 时完全正常,切换为域名 HTTPS 后,小程序(开发者工具 + 真机)全部失败,但浏览器和 curl 正常,且请求未进入 HTTP 层,判断问题发生在 TLS 或网络链路阶段。
万分感谢!
您好,补充排查信息如下。
1. 小程序请求代码
当前项目中,普通接口统一通过 apiUrl(path) 拼接域名,API_BASE_URL 当前配置为 https://api2.osbornfind.top。apiUrl 和 uploadUrl 的实现如下:apiUrl(path) 返回 API_BASE_URL + path,uploadUrl(dbPath) 返回 API_BASE_URL + '/' + dbPath。
1.1 wx.request 示例
历史详情页请求代码如下,实际项目中首页接口也是同样的 wx.request 调用方式:
wx.request({
url: apiUrl(`/history/${id}`),
success: (res: any) => {
if (res.statusCode < 200 || res.statusCode >= 300) {
// 省略错误处理
return
}
const data = res.data || {}
const foodsRaw = data.foods
const foods = withRatioPercent(foodsRaw)
const totalKcalRange = data.total_kcal_range || []
const imageUrl = data.image_path ? uploadUrl(data.image_path) : ''
this.setData({
imagePath: imageUrl,
foods,
totalKcalRange
})
},
fail: (err) => {
// 省略错误处理
}
})
1.2 wx.uploadFile 示例
图片上传识别接口代码如下:
wx.uploadFile({
url: apiUrl('/analyze'),
filePath: imagePath,
name: 'file',
timeout: 20000,
success: (res) => {
// 省略成功处理
},
fail: (err) => {
// 省略失败处理
}
})
当前上传请求中未额外设置 header,也未使用自定义证书或代理。
2. 最小化可复现示例
代码片段
https://developers.weixin.qq.com/s/yk8Ek1mq8186
当前用于最小复现的请求逻辑可以简化为下面这段:
wx.request({
url: 'https://api2.osbornfind.top/',
method: 'GET',
timeout: 15000,
success(res) {
console.log('success', res)
},
fail(err) {
console.log('fail', err)
}
})
以及上传最小示例:
wx.uploadFile({
url: 'https://api2.osbornfind.top/analyze',
filePath: '本地测试图片路径',
name: 'file',
timeout: 20000,
success(res) {
console.log('upload success', res)
},
fail(err) {
console.log('upload fail', err)
}
})
目前无论在微信开发者工具还是真机环境,都会报:
request:fail errcode:-101
cronet_error_code:-101
error_msg: net::ERR_CONNECTION_RESET
3. Nginx HTTPS 相关配置
当前 server_name api2.osbornfind.top 的 HTTPS 核心配置如下:
server_name api2.osbornfind.top;
ssl_certificate /etc/letsencrypt/live/api2.osbornfind.top/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api2.osbornfind.top/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
ssl_ecdh_curve secp256r1:secp384r1;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:8000;
}
这是当前 nginx -T 输出中对应 api2.osbornfind.top 的生效配置。
另外,使用以下命令验证过 TLS 握手:
openssl s_client -connect api2.osbornfind.top:443 -tls1_2 -curves secp256r1
结果显示:
- TLS1.2 握手成功
- Cipher 为
ECDHE-RSA-AES128-GCM-SHA256 - Temp Key 为
prime256v1 - Verify return code: 0 (ok)
4. 微信公众平台合法域名配置
已确认在微信公众平台正确配置以下三项合法域名,且均为同一域名:
- request 合法域名:
https://api2.osbornfind.top - uploadFile 合法域名:
https://api2.osbornfind.top - downloadFile 合法域名:
https://api2.osbornfind.top
补充说明
- 当前问题不只出现在真机,微信开发者工具中也可复现相同报错。
- 在未接入域名、直接使用服务器 IP 进行测试时,小程序原先可以正常访问。
- 切换为当前域名 HTTPS 后,浏览器和 curl 访问正常,但微信开发者工具与真机都会报
ERR_CONNECTION_RESET。 - 当前前端所有请求和图片地址均已统一走
https://api2.osbornfind.top,不存在旧域名残留。API_BASE_URL当前配置如下:export const API_BASE_URL = 'https://api2.osbornfind.top'。

ssl证书验证通过不了,小程序比较严格,不想浏览器随便糊弄就行了