Codex App Reconnecting 1/5 到 5/5 排障记录
Codex App Reconnecting 1/5 到 5/5 排障说明
1. 参考
https://linux.do/t/topic/1846916/12https://blog.csdn.net/zhou870498/article/details/160312916
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。
常见原因有:
- Codex App 没有读取或使用系统代理。
- 代理软件只接管浏览器,未接管桌面应用或命令行流量。
- WebSocket 流量没有正确走代理。
- 代理端口填写错误,例如把 HTTP 端口、SOCKS 端口、Mixed Port 混用错。
- 公司网络、防火墙、安全软件或 VPN 干扰了 WebSocket。
- 代理节点本身不稳定,导致长连接频繁断开。
4. 建议的处理顺序
- 如果本机本来就开了代理,先给 Codex 单独配置代理环境变量。
- 如果配置代理后仍然反复 Reconnecting,再考虑禁用 WebSocket,强制走 HTTP。
- 如果代理软件支持 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:
排除本机地址,避免访问 localhost、127.0.0.1、::1 时也绕到代理里。
5.4 端口选择原则
代理端口不能照抄示例,必须使用自己代理软件的实际端口。
常见客户端的端口位置:
- Clash Verge / Clash Verge Rev:设置里的
Mixed Port、HTTP Port、SOCKS Port - Clash for Windows:
General页面里的HTTP Port、SOCKS Port - Mihomo Party / Meta 类客户端:设置里的
服务端口、混合端口、HTTP 代理、SOCKS5 代理 - v2rayN:主界面底部或设置里的
HTTP、socks端口,常见是10808、10809 - nekoray / sing-box GUI:
Preferences或设置里的Local Port、HTTP Proxy、SOCKS Proxy
优先级建议:
- 有
Mixed Port时,优先使用 Mixed Port。 - 没有 Mixed Port 时,优先使用 HTTP Port 配置
HTTP_PROXY和HTTPS_PROXY。 - 如果只有 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 的方式连接。
重要注意事项:
- 如果
config.toml里已经有model_provider,不要直接覆盖,应该先理解当前配置。 - 修改前建议备份
config.toml。 - 如果正在使用自定义模型提供方、插件或特殊 provider,强行改
model_provider可能影响其他功能。 - 修改后同样需要完全退出 Codex App,再重新打开。
7. TUN 模式的取舍
也讨论过是否打开代理软件的 TUN 模式。
TUN 可以理解为让代理软件通过虚拟网卡接管系统流量。相比只设置 HTTP/SOCKS 代理,TUN 对桌面应用、命令行工具、WebSocket、部分不读取系统代理的软件更有效。
7.1 优点
- 兼容性更好,很多不认系统代理的程序也能被接管。
- 对 Codex App 这类桌面应用的 Reconnecting 问题有时很有效。
- WebSocket、命令行、Git、桌面 App 的网络问题更容易被统一处理。
- DNS 处理更完整,有时能减少“浏览器能上,客户端连不上”的问题。
7.2 缺点
- 更容易影响全局网络。
- 规则配置不当时,整个系统上网可能异常。
- 可能影响局域网设备访问,比如 NAS、打印机、投屏、公司内网。
- 可能和公司 VPN、安全软件、虚拟网卡、远程软件冲突。
- 资源占用通常略高于普通系统代理。
7.3 使用建议
建议先临时打开 TUN 测试:
- 打开代理软件的 TUN 模式。
- 完全退出 Codex App。
- 重新打开 Codex App。
- 观察 Reconnecting 是否消失。
如果 TUN 打开后问题立刻消失,大概率说明根因是代理接管不完整。之后可以再决定长期打开 TUN,或继续使用 .env 给 Codex 单独配置代理。
如果 TUN 导致局域网、公司内网、远程桌面或其他软件异常,应优先关闭 TUN,改用 .env 的单应用代理配置。
8. 验证方法
配置完成后,可以按下面顺序验证:
- 完全退出 Codex App。
- 确认代理软件正在运行,并且端口
10808处于监听状态。 - 重新打开 Codex App。
- 打开一个已有线程或新建线程。
- 观察是否仍然出现
Reconnecting 1/5 ~ 5/5。 - 连续打开几次不同线程,确认不是偶发成功。
- 如果只在某些网络环境下复现,例如公司网络、校园网、特定 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. 决策建议
优先推荐顺序:
- 先确认代理端口是否正确。
- 先使用
.env给 Codex 单独配置代理。 - 仍然 Reconnecting 时,临时打开 TUN 测试。
- 如果 TUN 有效但不适合长期打开,再考虑 HTTP-only 配置。
- 如果 HTTP-only 方案影响现有 provider 或插件,应谨慎回滚。
不建议一开始就同时改 .env、config.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,可以先检查:
C:\Users\<用户名>\.codex\.env是否仍存在。- 代理软件当前端口是否还是
10808。 - 代理软件是否正在运行。
- Codex App 是否已完全退出并重新打开。
- 是否启用了 TUN,或当前网络是否阻断 WebSocket。
如果端口已经变了,最可能的修复就是把 .env 里的 10808 改成当前代理软件实际端口。