Codex 专题 · 网络稳定性

Codex Reconnecting 5 次后失败怎么解决?

如果 Codex 每次对话都先显示 Reconnecting 1/5、2/5,一直数到 5/5 才开始回答,问题通常不在“模型太慢”,而在 WebSocket 流式链路没有建立。本文按日志分流,给出代理、HTTP 回退、Windows 沙盒和认证异常的处理顺序。

更新日期:2026-09-01·作者:island AI Coding 技术团队·主词:Codex Reconnecting
典型现象Reconnecting 1/5 → 5/5
优先检查WebSocket / 代理
验证结果HTTP 回退是否成功

1. 先看日志:你遇到的是哪一种重连

公众号文章把 Reconnecting 归纳为“没有正确走代理”和“请求到达后被服务器拒绝”两类。结合 Codex 的公开日志后,还可以再加一个判断:5 次重试以后有没有出现 falling back to HTTP

现象更可能的原因处理方向
每次约等待 20 秒,5 次后出现 falling back to HTTP,随后正常回答Responses WebSocket 没有被代理或线路正确转发配置 .codex/.env、使用 TUN,或暂时强制 HTTP
5 次后 HTTP 也失败,出现 401/403登录会话、API Key、MFA 或密钥分组权限重新认证并核对密钥、Base URL 与模型
出现 429额度、并发或上游限流降低并发,检查控制台余额和重试策略
长任务中途断流,首次请求正常长连接超时、网络抖动或上游流式兼容问题记录断点和响应协议,不要直接套用首次握手修复
先做一个低风险判断打开 Codex 日志,确认是 WebSocket 连接连续失败,还是服务端明确返回了 HTTP 状态码。不要一看到 Reconnecting 就立刻更换模型或删除全部配置。
脱敏探针显示 OpenAI Responses 端点返回 HTTP 401,并注明未复现 Codex WebSocket 重连
分层探针:请求已通过 DNS、TLS 与 HTTP 到达认证分支;它只用于排除基础不可达,不证明真实 Codex 客户端已经复现或修复 5 次重连。

2. 让 Codex 显式读取本地代理

桌面应用不一定会自动沿用浏览器的代理设置。公众号提供的实操方案是创建 ~/.codex/.env;Windows 对应 %USERPROFILE%\.codex\.env。端口必须换成你代理软件显示的 HTTP 或 mixed 端口,不能照抄示例端口。

~/.codex/.env(macOS / Linux / Windows)
HTTP_PROXY="http://127.0.0.1:PORT"
HTTPS_PROXY="http://127.0.0.1:PORT"
ALL_PROXY="socks5h://127.0.0.1:PORT"
NO_PROXY="localhost,127.0.0.1,::1"
  1. 先在代理软件设置中确认 HTTP、mixed、SOCKS5 各自的监听端口。
  2. 保留已有的其他环境变量,只新增或更新代理项。
  3. 保存后完全退出 Codex,包括托盘和后台进程;已有进程不会自动继承新环境。
  4. 重启后发送一个只读请求,观察是否还会重复 WebSocket 握手。

Windows 用户还可以把用户级环境变量与 WinHTTP 设置同步。它解决的是不同网络栈读取配置不一致的问题,不会改变 Codex 的模型或计费设置:

PowerShell(替换 LOCAL_PROXY_URL)
[Environment]::SetEnvironmentVariable("HTTP_PROXY", "<LOCAL_PROXY_URL>", "User")
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", "<LOCAL_PROXY_URL>", "User")
[Environment]::SetEnvironmentVariable("ALL_PROXY", "<LOCAL_PROXY_URL>", "User")
[Environment]::SetEnvironmentVariable("NO_PROXY", "localhost,127.0.0.1,::1", "User")
netsh winhttp import proxy source=ie
netsh winhttp show proxy

3. TUN 还是强制 HTTP:按网络条件选择

路线 A:保留 WebSocket,使用 TUN 或系统级隧道

如果你的代理工具能在 TUN 模式下接管系统流量,WebSocket 通常可以直接建立,交互延迟也更低。先用 TUN 验证,而不是同时修改多处 Codex 配置;这样出问题时容易回滚。

路线 B:关闭 Responses WebSocket,直接走 HTTP

如果当前网络只能稳定访问 HTTPS,可以让 Codex 跳过失败的 WSS 尝试。当前版本 schema 中提供了 feature 开关;升级 Codex 后先运行 codex features list 核对当前版本是否仍提供该项:

~/.codex/config.toml(二选一)
[features]
responses_websockets = false

如果你的版本不识别这个 feature,也可以给自定义 provider 明确声明不支持 WebSocket:

自定义 provider 写法
model_provider = "openai_http"

[model_providers.openai_http]
name = "OpenAI HTTP only"
wire_api = "responses"
supports_websockets = false
配置提示model_provider 是 TOML 顶层字段,不能缩进到 provider 节中。两种强制 HTTP 写法选一种即可;修改前备份 config.toml。部分旧版本可能隐藏 reasoning effort 选项,升级或恢复备份即可。

4. Windows 配置代理后沙盒无法写文件

Windows 上可能出现“找不到指定的模块”、文件写入失败或自动审批超时。这与 WebSocket 本身不是同一个问题:代理变量被继承进 elevated sandbox 后,沙盒初始化的代理端口记录可能发生冲突。

  1. 彻底退出 Codex,在任务管理器确认相关进程结束。
  2. 在已有的 [features] 节下加入 network_proxy = true,不要重复创建节。
  3. 在配置末尾加入下面的环境变量排除规则:
config.toml
[features]
network_proxy = true

[shell_environment_policy]
inherit = "all"
exclude = ["HTTP_PROXY", "HTTPS_PROXY", "ALL_PROXY", "http_proxy", "https_proxy", "all_proxy"]

然后打开 %USERPROFILE%\.codex\.sandbox\setup_marker.json,只把已有的代理端口列表改为空数组:

setup_marker.json
"proxy_ports": []

保存后普通方式启动 Codex,先测试新建文件和读取文件。features.network_proxy是给沙盒命令使用的网络代理,不等于模型请求代理;模型请求仍由 .env、系统代理或 TUN 决定。若仍然失败,sandbox = "unelevated"只能作为临时诊断回退,因为它会降低隔离强度。

5. 代理正常后,再排查认证与中转兼容

公众号还提到 MFA 或旧登录会话导致服务端拒绝连接。这个线索适合放在代理之后:如果日志已经出现 401/403,或者完全退出并重新登录后问题消失,再把它归因到认证状态;没有状态码时,不要把 MFA 当成默认答案。

  • 账号登录:在账号安全设置中确认 MFA/二次验证状态,完全退出 Codex 后重新登录。
  • API Key:确认密钥没有过期、没有多余空格,且密钥分组允许当前 Codex 模型。
  • Base URL:使用 https://www.codex789.com/v1,并确认提供方支持 /v1/responses
  • 模型代号:从 API 密钥页面复制准确代号,不要根据模型卡片标题手写。
  • 中转兼容:普通 Chat Completions 能用,不代表 Responses API、流式事件和 WebSocket 都已兼容;必要时先用 HTTP 方案验证。

如果返回 429,优先查看额度、并发和上游限流;如果是 500/502/503/504,记录时间、模型和请求协议,再联系服务支持,不要反复删除本地登录状态。

6. 一次修改只验证一个变量

  1. 保存 config.toml.env 和 sandbox marker 的回滚副本。
  2. 记录 Codex 版本、操作系统、代理协议和实际端口。
  3. 先测试短文本只读请求,再测试文件读取,最后测试文件写入。
  4. 观察日志:WebSocket 成功应不再连续等待;强制 HTTP 时应直接进入 Responses HTTP。
  5. 恢复代理或配置后重复同一测试,确认修复不是偶然网络波动。
给中转站用户的最短路径先完成Codex API 配置,确认 Base URL、密钥和 Responses API;再按本文配置代理。模型选择与可用分组以模型广场和控制台为准。

7. 常见问题

为什么 Codex 会先 Reconnecting 5 次?

常见情况是 Codex 优先尝试 Responses WebSocket,但代理或线路没有正确转发 WSS。5 次后如果出现 falling back to HTTP 且回答正常,说明 HTTP 可用,问题集中在 WebSocket 路径。

修改 .codex/.env 后为什么没变化?

Codex 已运行的进程不会自动加载新环境。要退出主窗口、托盘和后台进程,再重新启动;同时确认端口是代理实际监听的 HTTP 或 mixed 端口。

TUN 与强制 HTTP 哪个更合适?

能稳定转发 WebSocket 时优先 TUN;当前网络只适合 HTTPS 时,临时关闭 Responses WebSocket 更省时间。修好网络后可以恢复 WebSocket 配置。

Windows 沙盒报错和重连有关吗?

可能同时出现,但属于代理变量继承与沙盒初始化的另一条链路。按本文的 network_proxy、环境变量排除和 proxy_ports 清空步骤处理,并单独测试文件写入。

* 本文为 island AI Coding 技术团队原创整理,结合公众号文章、OpenAI Codex 官方配置参考与 GitHub Codex issue 公开讨论改写。某社区 相关线索因站内检索限流未采用不可核验的帖子链接;配置项会随 Codex 版本变化,修改前请备份并以当前版本 schema 为准。更新时间:2026-09-01。

参考:公众号文章 · Codex issue #14297 · Codex issue #29418 · 官方配置参考