收藏
回答

小程序请求 ERR_CONNECTION_RESET,请求未到达服务器,已排查多天未解决?

## 🔍 问题详细描述


### 问题现象

- 小程序请求 `https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu/api/auth/login` 时返回 `ERR_CONNECTION_RESET`

- **关键发现**:服务器访问日志中**完全没有小程序的请求记录**

- 说明请求在到达服务器之前就被拒绝了,很可能在 SSL 握手阶段


### 已确认的配置(全部正常)


#### 服务器端配置

1. ✅ **SSL 证书**:商用证书,证书链完整(3个证书),证书 SAN 正确

2. ✅ **SSL 握手**:`openssl s_client` 测试通过,`Verify return code: 0 (ok)`

3. ✅ **TLS 版本**:支持 TLS 1.2 和 TLS 1.3

4. ✅ **Nginx SSL 配置**:包含 `ssl_session_cache`、`ssl_session_timeout`、HSTS 头

5. ✅ **Nginx 路由配置**:`location /api` 配置正确

6. ✅ **防火墙**:443 端口已开放

7. ✅ **curl 测试**:可以正常访问,返回 200


#### 微信小程序配置

1. ✅ **域名配置**:`https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu` 已添加到 request合法域名

2. ✅ **域名格式**:不包含路径,不包含末尾 `/`,使用 `https://`

3. ✅ **开发者工具设置**:"不校验合法域名"已勾选


### 测试结果对比


| 测试方式 | 结果 | 说明 |

|---------|------|------|

| curl(普通请求) | ✅ 成功 | 可以正常访问所有接口 |

| curl(使用微信开发者工具请求头) | ❌ 失败 | Connection was reset |

| 浏览器 | ✅ 成功 | 可以正常访问所有接口 |

| 小程序(开发者工具) | ❌ 失败 | ERR_CONNECTION_RESET,请求未到达服务器 |

| 小程序(真机调试) | ❌ 失败 | ERR_CONNECTION_RESET,请求未到达服务器 |


---


## ⚠️ 关键发现:使用相同请求头的 curl 也失败


### 测试对比


**测试1:普通 curl 请求(成功)**

```bash

curl -X POST https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu/api/auth/login \

  -H "Content-Type: application/json" \

  -d '{"phone":"19877124635","password":"123456"}'

```

**结果**:✅ 成功,返回 200


**测试2:使用微信开发者工具的请求头(失败)**

```bash

curl.exe "https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu/api/auth/login" \

  -H "Referer: http://127.0.0.1:14287/" \

  -H "User-Agent: wechatdevtools desktopapp appservice hash/877457933 port/61940 messageProjectId/0 sid/qfkbnRzmxr runtime/2 MicroMessenger" \

  -H "content-type: application/json" \

  --data-binary "{\"phone\":\"19877124635\",\"password\":\"123456\"}" \

  --compressed -v

```

**结果**:❌ 失败,`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

```


### 发现说明

- ✅ 普通 curl 请求可以成功

- ❌ 使用微信开发者工具的请求头时,curl 也失败

- ❌ 错误发生在 SSL 握手阶段(`failed to receive handshake`)

- **说明问题很可能与请求头有关**,而不是小程序代码的问题


---


## 📋 完整的网络请求报错信息


### 从开发者工具 Network 面板复制的 curl 命令


```bash

curl "https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu/api/auth/login" ^

  -H "Referer: http://127.0.0.1:14287/" ^

  -H "User-Agent: wechatdevtools desktopapp appservice hash/877457933 port/61940 messageProjectId/0 sid/qfkbnRzmxr runtime/2 MicroMessenger" ^

  -H "content-type: application/json" ^

  --data-binary "^{^\^"phone^\^":^\^"19877124635^\^",^\^"password^\^":^\^"123456^\^"^}" ^

  --compressed

```


### 解析后的请求信息


**请求URL**:`https://api.zdvxsryedhtgvnmvbhgdrtysrydr.icu/api/auth/login`


**请求方法**:POST


**请求头**:

```

Referer: http://127.0.0.1:14287/

User-Agent: wechatdevtools desktopapp appservice hash/877457933 port/61940 messageProjectId/0 sid/qfkbnRzmxr runtime/2 MicroMessenger

Content-Type: application/json

Accept-Encoding: gzip, deflate, br (--compressed 参数)

```


**请求体**:

```json

{

  "phone": "19877124635",

  "password": "123456"

}

```


**错误信息**:

```

错误类型:ERR_CONNECTION_RESET

错误代码:errCode: undefined

错误消息:errMsg: "request:fail -2:net::ERR_CONNECTION_RESET"

```


---


## 📋 问题触发时的具体网络环境


### 开发者工具测试

- **网络环境**:WiFi

- **测试结果**:❌ 失败,ERR_CONNECTION_RESET

- **测试时间**:多次测试,持续多天


### 真机调试测试

- **测试设备**:iOS

- **网络环境1**:WiFi

  - **测试结果**:❌ 失败,ERR_CONNECTION_RESET

- **网络环境2**:4G(移动网络)

  - **测试结果**:❌ 失败,ERR_CONNECTION_RESET

- **测试时间**:多次测试,持续多天


### 对比测试(正常)

- **curl 测试**:✅ 成功(WiFi 网络环境)

- **浏览器测试**:✅ 成功(WiFi 网络环境)


---


## 📋 路由追踪报告


### 1. 从服务器到自己的路由追踪(MTR)


**执行命令**:

```bash

sudo mtr -r -c 10 api.zdvxsryedhtgvnmvbhgdrtysrydr.icu

```


**执行结果**:

```

Start: 2025-12-19T11:41:45+0800

HOST: iZ2zecgjzkg4hf11v8q38pZ

Loss%   Snt   Last   Avg  Best  Wrst StDev

  1.|-- 8.152.162.146                   0.0%    10    0.4   0.4   0.4   0.5   0.0

```


**结果说明**:

- ✅ 第一跳就是目标服务器本身(8.152.162.146)

- ✅ 丢包率:0.0%

- ✅ 延迟:0.4ms(说明是在服务器本身上执行的)


### 2. 从开发者工具所在网络到服务器的路由追踪(tracert)


**执行命令**(在 Windows PowerShell 中):

```powershell

tracert api.zdvxsryedhtgvnmvbhgdrtysrydr.icu

```


**执行结果**(完整输出):

```

通过最多 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

- ⚠️ 中间有多个跳数显示超时(`* * *`),这是正常的,可能是中间路由器禁用了 ICMP 响应

- ✅ **网络路径正常,可以到达服务器**(说明问题不在网络路由层面)


---


## 📋 环境信息


- **小程序 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(真机调试)


---


## 🎯 需要帮助的问题


1. **为什么使用微信开发者工具的请求头时,curl 也失败?**

   - 普通 curl 请求可以成功

   - 但使用相同的请求头(Referer + User-Agent)时,curl 也失败

   - 这是否说明问题在服务器端对请求头的处理?


2. **微信小程序对 SSL 证书有什么特殊要求?**

   - 为什么 curl 和浏览器可以访问,但小程序不能?

   - 是否有特定的证书品牌要求?

   - 是否有特定的证书链格式要求?


3. **微信小程序的 SSL 握手机制是什么?**

   - 为什么请求在到达服务器之前就被拒绝?

   - 是否有特定的 SSL 配置要求?

   - 是否有特定的加密套件要求?


4. **域名配置的生效机制是什么?**

   - 域名配置后需要多长时间才能生效?

   - 是否有验证域名配置是否生效的方法?

   - 是否需要特定的操作才能让配置生效?


5. **是否有其他可能的原因?**

   - 是否有网络环境的限制?

   - 是否有其他配置要求?


---


## 🔍 关键信息总结


**最关键的发现**:

1. 小程序的请求**根本没有到达服务器**(服务器日志中没有请求记录)

2. 使用相同的请求头时,curl 也失败,说明问题很可能在服务器端

3. 错误发生在 SSL 握手阶段,而不是应用层

4. curl 和浏览器可以正常访问,说明服务器端基本配置正常

5. **路由追踪正常**:从本地网络到服务器的路由路径正常,可以到达服务器(12跳,延迟47-51ms),说明问题不在网络路由层面


**已测试时间**:多天,反复验证,仍未解决


**已尝试的解决方案**:

1. ✅ 优化 Nginx SSL 配置

2. ✅ 检查证书链完整性

3. ✅ 检查证书 SAN

4. ✅ 检查防火墙和安全组

5. ✅ 确认域名配置格式

6. ✅ 确认"不校验合法域名"已勾选

7. ✅ 等待域名配置生效

8. ✅ 重启 Nginx 多次

9. ✅ 清除小程序缓存并重新编译

回答关注问题邀请回答
收藏

1 个回答

  • 智能回答 智能回答 本次回答由AI生成
    2025-12-19
    有用
    回复
登录 后发表内容