Blog

Zachary

Codex App Reconnecting 1/5 到 5/5 排障记录

发布于 # Codex

Codex App Reconnecting 1/5 到 5/5 排障说明

1. 参考

2. 典型现象

Codex Windows App 打开或发起任务时,界面反复显示类似:

Reconnecting 1/5
Reconnecting 2/5
Reconnecting 3/5
Reconnecting 4/5
Reconnecting 5/5

3. 初步原因判断

Codex App 可能优先尝试 WebSocket 连接,如果 WebSocket 没有被代理正确接管,或代理本身对 WebSocket 支持不好,就会触发反复 Reconnecting。

常见原因有:

  1. Codex App 没有读取或使用系统代理。
  2. 代理软件只接管浏览器,未接管桌面应用或命令行流量。
  3. WebSocket 流量没有正确走代理。
  4. 代理端口填写错误,例如把 HTTP 端口、SOCKS 端口、Mixed Port 混用错。
  5. 公司网络、防火墙、安全软件或 VPN 干扰了 WebSocket。
  6. 代理节点本身不稳定,导致长连接频繁断开。

4. 建议的处理顺序

  1. 如果本机本来就开了代理,先给 Codex 单独配置代理环境变量。
  2. 如果配置代理后仍然反复 Reconnecting,再考虑禁用 WebSocket,强制走 HTTP。
  3. 如果代理软件支持 TUN 模式,可以临时打开 TUN 测试,因为 TUN 对桌面应用和 WebSocket 的接管更完整。

5. 方案一:给 Codex 单独配置代理

5.1 配置位置

Codex 的本地配置目录是:

%USERPROFILE%\.codex\

完整路径通常是:

C:\Users\<用户名>\.codex\

在这个目录下创建或编辑:

C:\Users\<用户名>\.codex\.env

5.2 实际写入的配置

后续确认代理端口是 10808,并让 Codex 直接设置。旧线程记录显示,当时创建了:

C:\Users\<用户名>\.codex\.env

写入内容为:

HTTP_PROXY=http://127.0.0.1:10808
HTTPS_PROXY=http://127.0.0.1:10808
ALL_PROXY=socks5://127.0.0.1:10808
NO_PROXY=localhost,127.0.0.1,::1

5.3 这几项的含义

HTTP_PROXY: 让普通 HTTP 请求走本机代理。

HTTPS_PROXY: 让 HTTPS 请求走本机代理。

ALL_PROXY: 给支持通用代理变量的程序提供 SOCKS5 代理地址。

NO_PROXY: 排除本机地址,避免访问 localhost127.0.0.1::1 时也绕到代理里。

5.4 端口选择原则

代理端口不能照抄示例,必须使用自己代理软件的实际端口。

常见客户端的端口位置:

优先级建议:

  1. Mixed Port 时,优先使用 Mixed Port。
  2. 没有 Mixed Port 时,优先使用 HTTP Port 配置 HTTP_PROXYHTTPS_PROXY
  3. 如果只有 SOCKS5 端口,再配置 ALL_PROXY=socks5://127.0.0.1:端口

5.5 修改后必须重启 Codex

修改 .env 后,需要完全退出 Codex App,再重新打开。

注意不是只关闭当前线程窗口,而是要让 Codex App 整个进程退出后重新启动,否则新的环境变量可能不会生效。

6. 方案二:禁用 WebSocket,强制走 HTTP

如果方案一仍然反复 Reconnecting,备用方案是修改:

C:\Users\<用户名>\.codex\config.toml

在文件最外层加入类似配置:

model_provider = "openai_http"

[model_providers.openai_http]
name = "OpenAI HTTP only"
wire_api = "responses"
supports_websockets = false

这类配置的目的,是让 Codex 不走 WebSocket,改为 HTTP-only 的方式连接。

重要注意事项:

7. TUN 模式的取舍

也讨论过是否打开代理软件的 TUN 模式。

TUN 可以理解为让代理软件通过虚拟网卡接管系统流量。相比只设置 HTTP/SOCKS 代理,TUN 对桌面应用、命令行工具、WebSocket、部分不读取系统代理的软件更有效。

7.1 优点

7.2 缺点

7.3 使用建议

建议先临时打开 TUN 测试:

  1. 打开代理软件的 TUN 模式。
  2. 完全退出 Codex App。
  3. 重新打开 Codex App。
  4. 观察 Reconnecting 是否消失。

如果 TUN 打开后问题立刻消失,大概率说明根因是代理接管不完整。之后可以再决定长期打开 TUN,或继续使用 .env 给 Codex 单独配置代理。

如果 TUN 导致局域网、公司内网、远程桌面或其他软件异常,应优先关闭 TUN,改用 .env 的单应用代理配置。

8. 验证方法

配置完成后,可以按下面顺序验证:

  1. 完全退出 Codex App。
  2. 确认代理软件正在运行,并且端口 10808 处于监听状态。
  3. 重新打开 Codex App。
  4. 打开一个已有线程或新建线程。
  5. 观察是否仍然出现 Reconnecting 1/5 ~ 5/5
  6. 连续打开几次不同线程,确认不是偶发成功。
  7. 如果只在某些网络环境下复现,例如公司网络、校园网、特定 Wi-Fi,应切换网络再对比。

可以用 PowerShell 查看常见代理端口是否监听:

netstat -ano | findstr ":7890 :7891 :7897 :1080 :10808 :10809"

也可以查看所有监听端口:

Get-NetTCPConnection -State Listen | Sort-Object LocalPort

9. 回滚方法

如果配置后出现问题,可以按下面方式回滚。

9.1 回滚 .env

如果只新增了代理变量,可以删除或临时重命名:

C:\Users\<用户名>\.codex\.env

例如重命名为:

C:\Users\<用户名>\.codex\.env.bak

然后完全退出 Codex App 并重新打开。

9.2 回滚 config.toml

如果修改过 config.toml,应恢复修改前的备份。

如果只是加入了 HTTP-only provider,可以删除这段:

model_provider = "openai_http"

[model_providers.openai_http]
name = "OpenAI HTTP only"
wire_api = "responses"
supports_websockets = false

但如果 config.toml 中还有其他 provider 配置,删除前要确认没有影响其他配置块。

10. 决策建议

优先推荐顺序:

  1. 先确认代理端口是否正确。
  2. 先使用 .env 给 Codex 单独配置代理。
  3. 仍然 Reconnecting 时,临时打开 TUN 测试。
  4. 如果 TUN 有效但不适合长期打开,再考虑 HTTP-only 配置。
  5. 如果 HTTP-only 方案影响现有 provider 或插件,应谨慎回滚。

不建议一开始就同时改 .envconfig.toml 和 TUN。一次只改一个变量,更容易判断哪一步真正生效。

11. 当前可复用结论

最终落地的是方案一:给 Codex 配置代理环境变量,端口为 10808

当时写入的关键配置是:

HTTP_PROXY=http://127.0.0.1:10808
HTTPS_PROXY=http://127.0.0.1:10808
ALL_PROXY=socks5://127.0.0.1:10808
NO_PROXY=localhost,127.0.0.1,::1

如果以后再次遇到 Codex App 每次打开都 Reconnecting,可以先检查:

如果端口已经变了,最可能的修复就是把 .env 里的 10808 改成当前代理软件实际端口。