小程序请求 `https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu/api/auth/login` 时返回 `ERR_CONNECTION_RESET`,请求未到达服务器,已排查多天未解决。
## 1. 系统信息和基础库版本
- **基础库版本**:3.12.0
- **操作系统**:iOS 10.0.1(开发者工具模拟)
- **平台**:devtools
- **微信版本**:8.0.5
- **开发者工具版本**:Stable 2.01.2510250
- **运行环境**:Windows,mp,2.01.2510250; lib: 3.12.0
---
## 2. 客户端日志
### 控制台错误
```
POST https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu/api/auth/login
net::ERR_CONNECTION_RESET
请求失败: {errMsg: "request: fail", errno: undefined}
(env: Windows,mp,2.01.2510250; lib: 3.12.0)
Source: test.js? [sm]:42
```
### 系统信息对象
```
系统信息: {
batteryLevel: 100,
benchmarkLevel: -1,
brand: "devtools",
memorySize: 2048,
model: "iPhone 12/13 (Pro)",
...
}
```
---
## 3. Network Headers 信息
### Request Headers
- **Request URL**: `https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu/api/auth/login`
- **Request Method**: POST
- **content-type**: `application/json`
- **Referer**: `http://127.0.0.1:61687/`
- **User-Agent**: `wechatdevtools desktopapp appservice hash/877457933 port/61940 messageProjectId/0 sid/xMTFmLpTiS runtime/2 MicroMessenger`
### Request Payload
```json
{
"phone": "19877124635",
"password": "123456"
}
```
### Response Headers
- **状态**:连接被重置,没有响应头
---
## 4. Network Timing 信息
- **Queued at**: 293.12 ms
- **Started at**: 293.12 ms
- **Connection Start**: (有显示,但没有具体时间)
- **Stalled**: (有显示,但没有具体时间)
- **总时长**: 936.71 ms
- **⚠️ 重要**:**没有看到 SSL 握手的具体时间**,说明 SSL 握手在更早的阶段就失败了
---
## 5. 服务器端日志分析
### 访问日志
**关键发现**:
- ❌ **访问日志中没有小程序的请求记录**
- ✅ 来自微信开发者社区的请求可以成功(200状态码)
- ✅ 说明服务器端配置正常,可以正常处理请求
**相关日志条目**:
```
2025/12/19 - 117.13.120.14 - POST /api/auth/login - 200
```
### 错误日志
**关键发现**:
- ✅ **错误日志中没有 SSL 相关错误**
- ✅ 主要错误是 "directory index forbidden"(正常错误,不是导致问题的原因)
- ✅ 没有看到 "SSL handshake failed" 或类似的错误
---
## 6. 关键发现总结
### 1. 小程序的请求根本没有到达服务器
- 访问日志中没有小程序的请求记录(没有 `wechatdevtools` 或 `MicroMessenger` 的请求)
- 说明请求在到达服务器之前就被拒绝了
### 2. 问题发生在 SSL 握手阶段
- Network Timing 中没有 SSL 握手的具体时间
- 错误日志中没有 SSL 相关错误(因为请求没有到达服务器)
- 说明 SSL 握手在更早的阶段就失败了
### 3. 使用相同请求头时,curl 也失败
**测试结果**:
- ✅ 普通 curl 请求(无特殊请求头)→ 成功
- ❌ 使用微信开发者工具的请求头(Referer + User-Agent)→ 失败,Connection was reset
**详细错误**:
```
* Connected to api.zdvxsryedhtgvnmvbhgdrtysrydr.icu (8.152.162.146) port 443
* Recv failure: Connection was reset
* schannel: failed to receive handshake, SSL/TLS connection failed
curl: (35) Recv failure: Connection was reset
```
### 4. 服务器端配置正常
- 来自微信开发者社区的请求可以成功(200状态码)
- curl 和浏览器可以正常访问
- 说明服务器端基本配置正常
---
## 7. 已尝试的解决方案
1. ✅ 优化 Nginx SSL 配置(添加 `ssl_session_cache`、`ssl_session_timeout`、HSTS)
2. ✅ 检查证书链完整性(3个证书,顺序正确)
3. ✅ 检查证书 SAN(正确)
4. ✅ 检查防火墙和安全组(443 端口已开放)
5. ✅ 确认域名配置格式(正确)
6. ✅ 确认"不校验合法域名"已勾选
7. ✅ 等待域名配置生效(已等待多天)
8. ✅ 重启 Nginx 多次
9. ✅ 清除小程序缓存并重新编译
---
## 8. 环境信息
- **小程序 AppID**:`wx78879edfd566e8a7`
- **服务器域名**:`https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu`
- **服务器IP**:8.152.162.146
- **SSL 证书**:商用证书(宝塔 DV TLS RSA CA 2025)
- **服务器**:阿里云 ECS
- **Web 服务器**:Nginx 1.28.0
- **PHP 版本**:8.2
- **测试设备**:iOS
- **网络环境**:WiFi(开发者工具和真机调试)、4G(真机调试)
---
## 9. 路由追踪报告
### 从开发者工具所在网络到服务器的路由追踪
```
通过最多 30 个跃点跟踪
到 api.zdvxsryedhtgvnmvbhgdrtysrydr.icu [8.152.162.146] 的路由:
1 <1 毫秒 <1 毫秒 <1 毫秒 192.168.1.1 [192.168.1.1]
2 3 ms 4 ms 5 ms 100.72.0.1
3 10 ms 4 ms 3 ms 222.83.227.245
4 * * * 请求超时。
5 * * * 请求超时。
6 * * * 请求超时。
7 * * * 请求超时。
8 46 ms 45 ms 45 ms 106.38.196.230
9 * * * 请求超时。
10 * * * 请求超时。
11 * * * 请求超时。
12 47 ms 48 ms 51 ms 8.152.162.146
跟踪完成。
```
**结果说明**:
- ✅ 路由追踪成功完成,最终到达目标服务器(8.152.162.146)
- ✅ 总跳数:12 跳
- ✅ 最终延迟:47-51ms
- ✅ **网络路径正常,可以到达服务器**(说明问题不在网络路由层面)
---
## 10. 需要帮助的问题
1. **为什么使用微信开发者工具的请求头时,curl 也失败?**
- 普通 curl 请求可以成功
- 但使用相同的请求头(Referer + User-Agent)时,curl 也失败
- 这是否说明问题在服务器端对请求头的处理?
2. **为什么小程序的请求没有到达服务器?**
- 访问日志中没有小程序的请求记录
- 说明请求在到达服务器之前就被拒绝了
- 这是否与 SSL 握手有关?
3. **为什么 Network Timing 中没有 SSL 握手时间?**
- 这是否说明 SSL 握手在更早的阶段就失败了?
- 微信小程序对 SSL 握手有什么特殊要求?
4. **微信小程序对 SSL 证书有什么特殊要求?**
- 为什么 curl 和浏览器可以访问,但小程序不能?
- 是否有特定的证书品牌要求?
- 是否有特定的证书链格式要求?
5. **是否有其他可能的原因?**
- 是否有网络环境的限制?
- 是否有其他配置要求?
---
## 11. 可复现代码片段
**代码片段 ID**:`a07de76a27e3e7836c4ea39d72f75eda`
**分享链接**:https://developers.weixin.qq.com/s/a07de76a27e3e7836c4ea39d72f75eda
**说明**:代码片段已创建并上传,可以在微信开发者工具中导入验证。
---
## 12. Wireshark 抓包(可选)
[待补充 - 如果需要,可以上传 .pcap 文件]
---
## 📝 总结
**最关键的发现**:
1. 小程序的请求**根本没有到达服务器**(访问日志中没有请求记录)
2. 问题发生在 **SSL 握手阶段**(Network Timing 中没有 SSL 握手时间)
3. 使用相同的请求头时,curl 也失败,说明问题很可能在服务器端
4. 服务器端配置正常(来自微信开发者社区的请求可以成功)
**已测试时间**:多天,反复验证,仍未解决
---
## 13. 根据 AI 建议的配置检查结果
### 1. User-Agent 过滤规则检查
**执行命令**:
```bash
sudo grep -i "user-agent\|user_agent" /www/server/panel/vhost/nginx/8.152.162.146.conf
```
**检查结果**:✅ **没有找到 User-Agent 过滤规则**
- 命令执行后没有输出
- 配置文件中没有 User-Agent 相关的过滤规则
- **不是导致问题的原因**
### 2. TLS 版本配置检查
**执行命令**:
```bash
sudo grep "ssl_protocols" /www/server/panel/vhost/nginx/8.152.162.146.conf
```
**检查结果**:✅ **配置正确**
**输出**:
```
ssl_protocols TLSv1.2 TLSv1.3;
```
**说明**:
- ✅ 支持 TLS 1.2(微信小程序要求的最低版本)
- ✅ 支持 TLS 1.3(最新版本)
- ✅ 不包含 TLS 1.1(已排除旧版本)
- **配置符合微信小程序的要求**
### 3. SNI 支持检查
#### 3.1 server_name 配置
**执行命令**:
```bash
sudo grep "server_name" /www/server/panel/vhost/nginx/8.152.162.146.conf
```
**检查结果**:✅ **配置正确**
**输出**:
```
server_name 8.152.162.146 api.zdvxsryedhtgvnmvbhgdrtysrydr.icu zdvxsryedhtgvnmvbhgdrtysrydr.icu;
```
**说明**:
- ✅ 包含 `api.zdvxsryedhtgvnmvbhgdrtysrydr.icu`(API 域名)
- ✅ SNI 支持已正确配置
#### 3.2 ssl_prefer_server_ciphers 配置
**执行命令**:
```bash
sudo grep "ssl_prefer_server_ciphers" /www/server/panel/vhost/nginx/8.152.162.146.conf
```
**检查结果**:✅ **配置正确**
**输出**:
```
ssl_prefer_server_ciphers on;
```
**说明**:
- ✅ 已启用服务器偏好加密套件
- **配置正确**
### 4. 总结
**所有配置都符合微信小程序的要求,但问题仍然存在。**
这说明:
1. 问题不在这些基础配置上
2. 可能是其他更深层的原因:
- 微信小程序对 SSL 握手的特殊要求
- 微信开发者工具的网络环境问题
- 服务器端其他安全策略(如防火墙、WAF等)
- 证书链的某些细节问题
