Codex 每次对话都 Reconnecting?五次重连的真相和修复办法¶
来源:B站视频《Codex重连问题原因分析+解决方案分享》(UP主:暮闲,2026-05-10,视频链接) 配置项已对照 Codex 官方 config 文档 核实
先说现象:能用,但每句话都要先罚站十几秒¶
最近用 Codex 的同学应该有人碰到过这个情况:每次发起对话,它先给你爆两三个 Reconnecting...,重的能连着报五次,然后才慢吞吞地开始返回内容。
说实话这种问题最烦人。它不是不能用,是每次都要等你十几秒。你要是没耐心,可能以为是自己网络不行,或者 Codex 挂了,其实都不是。
原因:子进程不继承代理,先直连五次才认怂¶
根因一句话:代理配置没传到 Codex 的子进程里。
Codex 每次发起对话,都会新建一个子进程去干活的。这个子进程启动的时候,默认只会继承 PATH、HOME 这几个基础变量,你的代理环境变量它根本看不到。
于是它的行为就成了这样:
- 子进程先尝试直连 OpenAI 的服务器(地址在国外)
- 直连超时,重试,再超时,再重试……一共试 5 次
- 5 次全失败,才回退去走系统代理
- 这才正常返回
所以你看到的每次 Reconnecting,就是它在直连上撞墙。墙上撞五次才想起来走门,时间全浪费在这了。
视频里作者现场复现了整个过程:发一句"你好",眼看着重连报错蹦了五次,然后才收到回复。问题不影响结果,但每次对话都要交一遍"过路费"。
解决:三步,第三步是关键¶
第一步:先验证代理地址是好的¶
从你的代理软件里复制本地监听地址(一般长这样:http://127.0.0.1:7890,端口看你自己的软件,Clash 默认 7890)。
在终端里手动带上代理测一下:
# 不带代理,访问不了
curl https://www.google.com
# 带上代理,能通,说明地址没问题
HTTP_PROXY=http://127.0.0.1:7890 curl https://www.google.com
能返回内容,说明代理地址没问题,往下走。
第二步:把代理写进 shell 环境变量¶
macOS 编辑 ~/.zshrc,Linux 编辑 ~/.bashrc,Windows 直接在"系统环境变量"界面配:
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export ALL_PROXY=socks5://127.0.0.1:7890
保存后 source ~/.zshrc,然后 echo $HTTPS_PROXY 能输出地址,就是生效了。
小提醒:变量名是大小写敏感的,第三步白名单里要写一样的名字。
第三步:改 Codex 的 config.toml(关键)¶
注意,光写进 shell 没用。因为 Codex 的子进程默认不继承这些变量,这就是问题的根源。
Codex 的配置文件在 ~/.codex/config.toml,里面有一段控制"子进程启动时从主机继承哪些环境变量"的配置,官方文档里叫 shell_environment_policy。默认基线只带 PATH、HOME 这类基础变量。
把三个代理变量追加进白名单:
[shell_environment_policy]
# 默认只继承 PATH/HOME 等基础变量,把代理变量加进白名单
include_only = ["PATH", "HOME", "HTTP_PROXY", "HTTPS_PROXY", "ALL_PROXY",
"http_proxy", "https_proxy", "all_proxy"]
两个细节:
- 大小写都写上。不少工具只认小写的
http_proxy,白名单里大小写各一份最稳妥。 - 原来的
PATH、HOME要保留,别只留代理变量,否则可执行命令和缓存目录都找不到了。
我自己在用的是下面这份,验证过能解决重连问题(代理变量走的小写——如果你的 shell 里 export 的就是小写变量名,这样写就够了):
[shell_environment_policy]
include_only = [
"PATH",
"HOME",
"https_proxy",
"http_proxy",
"all_proxy"
]
如果不想一个个列,也可以直接放开继承(简单粗暴,但会把主机上所有变量都带给子进程,含密钥类的变量要自己掂量):
[shell_environment_policy]
inherit = "all"
验证¶
完全退出 Codex 再重新打开(改配置不重启等于白改),发起一句对话:
- 修复前:
Reconnecting...报两三次到五次,然后才返回 - 修复后:直接返回,一次重连都没有
到这一步就说明子进程已经正常读到你主机上的代理配置了,问题解决。
小结¶
这个问题的信息量其实一句话就能装下:Codex 子进程不继承代理变量,每次都先直连失败五次才回退走代理;把三个代理变量同时写进 shell 配置和 config.toml 的 shell_environment_policy,就完了。
视频本身偏手把手演示,7 分钟里大半在敲命令,看文字版就够了。另外它默认你已经在用付费代理环境,演示以 macOS 为主,Windows 只带了一句——不过思路是通用的,三步照搬即可。