科技熊工作室科技熊工作室 · 攻略
攻略 / AI 工具

Codex 代理配置完整教程:浏览器能开 ChatGPT,Codex 却一直重连怎么办(2026)

📅 2026-10-26 ⏱ 约 22 分钟

OpenAI 的 Codex 有三种形态:命令行工具 Codex CLI、桌面 App(Codex Desktop),以及 VS Code 等编辑器里的插件。它们底层都是同一个用 Rust 写的后台程序,负责和 OpenAI 服务器通信。国内用户最常遇到的情况是:浏览器打开 chatgpt.com 一切正常,Codex 却每条消息都卡在「正在重新连接 1/5 … 5/5」,最后报 Connection failed: error sending request 或 stream disconnected before completion。

这几乎都不是节点或账号的问题,而是 Codex 根本没有走到代理上。本文以科技熊推荐的电脑客户端 Clash Verge Rev(科技熊版) 为例(Windows 教程、macOS 教程),界面上的名称都按它来写;用其它客户端的,原理完全一样,对照找到同名功能即可。截至 2026 年 10 月,Codex 版本约为 0.16x。

一、先弄清:Codex 只认环境变量,不认系统代理

Clash Verge Rev 首页「科技熊工作室」卡片上有一个「浏览器 / 整机」的切换:

  • 浏览器:客户端把代理地址写进系统的代理设置,浏览器和大多数图形界面程序会主动去读它,所以网页能正常打开。
  • 整机:客户端建一块虚拟网卡(也就是 TUN 模式),在系统层面接管所有程序的流量,不管程序读不读代理设置。

Codex 的后台程序默认不读系统代理设置,它只认下面几个标准环境变量:

变量 作用
HTTPS_PROXY HTTPS 请求走的代理,包括 wss:// 的 WebSocket 长连接
HTTP_PROXY 明文 HTTP 请求走的代理
ALL_PROXY 兜底,上面两个都没设时使用
NO_PROXY 不走代理的地址,如 localhost,127.0.0.1,::1

所以在「浏览器」模式下,浏览器能用、Codex 连不上,是意料之中的事。解决办法有两条,任选其一:

  1. 切到「整机」:让虚拟网卡把 Codex 的流量也接过去,不用设任何变量(第二节)。
  2. 保持「浏览器」,给 Codex 设环境变量:把 Codex 指向 Clash Verge Rev 的混合代理端口(第三节)。

Codex 源码里已经有一个「读取系统代理」的开关(config.toml 里 [features] 下的 respect_system_proxy),但截至本文仍标记为「开发中」、默认关闭,不建议依赖它。

一个最容易被忽略的地方:~/.codex/.env

Codex 启动时、在做任何网络请求之前,会读取 Codex 目录下的 .env 文件,把里面的每一行都写进自己的环境变量(这段逻辑在 Codex 源码 codex-rs/arg0/src/lib.rs 的 load_dotenv() 里,只跳过 CODEX_ 开头的变量)。也就是说:

  • 只要 .env 里有同名变量,它会覆盖系统里设好的环境变量。
  • 在 Windows 上这个文件是 %USERPROFILE%\.codex\.env,macOS / Linux 上是 ~/.codex/.env(如果设了 CODEX_HOME,则在那个目录下)。

一个真实案例:用户的 Clash Verge Rev 混合代理端口是 7897,系统环境变量也改对了、反复检查了三遍,Codex 却一直报 os error 10061。最后发现是早年按某篇教程在 .codex\.env 里写过 HTTPS_PROXY=http://127.0.0.1:7890(7890 是很多旧教程里的端口),Codex 每次启动都用它覆盖了正确的值,所有请求都打到一个没有程序在监听的端口上。

这个坑在「整机」模式下同样存在:只要 Codex 读到了代理变量,它就会先去连那个本机端口,端口不对照样被拒绝,虚拟网卡也帮不上忙。所以配置原则只有一条:代理只写在一个地方,而且端口要和 Clash Verge Rev 显示的一致。

两个相关的小知识

  • 只在启动时读一次。 环境变量和 .env 都只在进程启动那一刻读取。改完之后,已经在运行的 Codex 感知不到。桌面 App 关掉窗口后通常还留在托盘 / 菜单栏里,必须从托盘图标彻底退出再重开;CLI 要关掉终端窗口新开一个。
  • WebSocket 优先,HTTPS 兜底。 Codex 和服务器之间优先建立 wss:// 长连接,失败后退回普通 HTTPS,此时 CLI 会提示 Falling back from WebSockets to HTTPS transport。一条长连接要保持好几分钟,比网页请求更怕两件事:本机代理端口不通,以及会话途中出口 IP 变了。

二、最省事的做法:切到「整机」

适合 Windows 和 macOS 上的大多数人:

  1. 打开 Clash Verge Rev,在首页「科技熊工作室」卡片上把范围从「浏览器」切到「整机」,模式保持「规则」(卡片下方会显示「所有应用海外流量走代理」)。
  2. 第一次切到「整机」时,客户端会提示安装一个随应用附带的系统服务,需要输入一次电脑的管理员密码。装好后会自动开启整机代理。
  3. 先按第五节的命令检查一遍,确认系统环境变量和 ~/.codex/.env 里没有写错端口的代理变量;有的话删掉,或改成 Clash Verge Rev 显示的端口。
  4. 从托盘图标彻底退出 Codex 再重新打开,CLI 则新开一个终端。

这样 Codex 的请求会被虚拟网卡接管,再按订阅里的分流规则送到 ChatGPT 分组,不需要设置任何环境变量。同一台电脑上的 Claude Code、Cursor、git、npm 等工具也会一并走代理。

两点说明:

  • Linux 版的卡片上没有这个切换,Linux 用户请用第三节的环境变量方法。
  • 「整机」接管的是所有程序的海外流量。国内网站在「规则」模式下照常直连,不消耗流量;别切到「全局」,否则国内流量也会走代理并计入流量。

三、保持「浏览器」:给 Codex 设环境变量

不想装系统服务、只想让 Codex 单独走代理,或者用的是 Linux,就给 Codex 设环境变量。

第 1 步:看 Clash Verge Rev 的混合代理端口

打开 Clash Verge Rev 首页,滚到最下方的「Clash 信息」卡片,看「混合代理端口」这一行。科技熊版默认是 7897,同一张卡片的「系统代理地址」会显示 127.0.0.1:7897。混合端口同时接受 HTTP 和 SOCKS 两种请求,下面统一写成 http://127.0.0.1:7897;如果你的卡片上显示的不是 7897,把下文所有 7897 换成你看到的数字。

顺便确认出口地区。用 Cloudflare 的 trace 接口看出口落在哪:

# Windows PowerShell 里要写 curl.exe,避免被 PowerShell 的 curl 别名接管
curl.exe -x http://127.0.0.1:7897 https://chatgpt.com/cdn-cgi/trace

重点看两行:loc= 是出口地区,ip= 是出口 IP。中国大陆、香港、澳门不在 OpenAI 的支持地区内,出口落在这些地方会直接 403;台湾、美国、日本、新加坡等可以。注意,这条命令用 -x 手动指定了端口,它证明的是「7897 → 节点 → OpenAI」这条链路是通的,不能证明 Codex 用的也是这个端口。

第 2 步:按系统设置

Windows:用「用户级环境变量」,一次设置,对 CLI、桌面 App、编辑器插件都生效。在 PowerShell 或 CMD 里执行:

setx HTTP_PROXY  "http://127.0.0.1:7897"
setx HTTPS_PROXY "http://127.0.0.1:7897"
setx NO_PROXY    "localhost,127.0.0.1,::1"

setx 写入的值只对之后新开的程序生效。接着检查 .env(没有这个文件就什么都不显示):

Get-Content $env:USERPROFILE\.codex\.env -ErrorAction SilentlyContinue

里面如果有 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY 之类的行,要么删掉整个文件(Remove-Item $env:USERPROFILE\.codex\.env,前提是里面没有你需要的其它设置),要么把端口改成 7897。然后从任务栏托盘图标彻底退出 Codex 再重开,终端和 VS Code 也整个重开。

只想在当前终端里临时用一次:

$env:HTTPS_PROXY = "http://127.0.0.1:7897"
$env:HTTP_PROXY  = "http://127.0.0.1:7897"
codex

macOS / Linux 的 CLI:把变量写进 shell 配置文件(macOS 默认 zsh 用 ~/.zshrc,bash 用 ~/.bashrc),保存后 source ~/.zshrc 或新开终端:

export HTTP_PROXY="http://127.0.0.1:7897"
export HTTPS_PROXY="http://127.0.0.1:7897"
export NO_PROXY="localhost,127.0.0.1,::1"

macOS 桌面 App:从程序坞或「应用程序」里点开的 App 不会读 ~/.zshrc,所以只在 shell 里设变量,CLI 能用、桌面 App 照样连不上。这种情况正好可以用 .env:把同样的三行(去掉 export)写进 ~/.codex/.env,桌面 App 和 CLI 启动时都会读到。

mkdir -p ~/.codex
cat > ~/.codex/.env <<'EOF'
HTTP_PROXY=http://127.0.0.1:7897
HTTPS_PROXY=http://127.0.0.1:7897
NO_PROXY=localhost,127.0.0.1,::1
EOF

选了 .env 就把 ~/.zshrc 里那几行删掉,只留一处。以后端口变了,只改这一个文件。

WSL:WSL2 里的 127.0.0.1 默认指的是 WSL 自己,不是 Windows。最简单的是在 Windows 上把 Clash Verge Rev 切到「整机」;或者在 %USERPROFILE%\.wslconfig 里设 networkingMode=mirrored(镜像网络,Windows 11 22H2 及以上),之后 WSL 里的 127.0.0.1:7897 就能直接连到 Windows 上的 Clash Verge Rev。

用 http:// 还是 socks5://? 用 http://。Codex 的 GitHub issue 里有 Windows 用户反馈,变量写成 socks5:// 时流式输出和上下文压缩相关的请求会出错,换成 http:// 后明显好转。

四、安装与登录这两步也要过代理

安装。 Codex CLI 用 npm 安装:

npm install -g @openai/codex

npm 本身也要能连上 registry:在「整机」模式下直接装即可;在「浏览器」模式下,先在同一个终端里设好上面的代理变量,或者临时换国内镜像 npm install -g @openai/codex --registry=https://registry.npmmirror.com。装完用 codex --version 确认。桌面 App 从 OpenAI 官网下载。

登录。 执行 codex login(或第一次运行 codex)会打开浏览器让你登录 ChatGPT 账号,登录完成后浏览器会跳回本机 localhost:1455,由 Codex 在本地接收登录结果。两个要点:

  • NO_PROXY 里要有 localhost,127.0.0.1,否则本机回调有可能被错误地送进代理。
  • 浏览器和 Codex 必须在同一台机器上。通过 SSH 登录的服务器、容器、部分 WSL 环境里,浏览器跳不回来,可以改用设备码登录:codex login --device-auth,在任意设备的浏览器里输入屏幕上的代码即可(个人账号需先在 ChatGPT 的设置里允许设备码登录,团队工作区需管理员开启)。

用 API Key 的,从标准输入传入,避免 Key 留在命令历史里:

printenv OPENAI_API_KEY | codex login --with-api-key

五、分组:在「💬ChatGPT」里固定一个节点

科技熊下发的配置里,ChatGPT 与 Codex 的流量(chatgpt.com、ws.chatgpt.com 等 OpenAI 域名)都走「💬ChatGPT」这个分组。它默认是自动选择 AI 节点,而且切换门槛设得很高,平时很少换节点。

Codex 一次 WebSocket 会话要保持好几分钟,中途换了出口 IP,服务端可能认为会话异常,表现就是断流、重连;同一个账号的出口 IP 频繁在多个地区之间跳,本身也更容易触发风控。跑长任务时更稳的做法是:

  1. 打开 Clash Verge Rev 的「代理」页,找到「💬ChatGPT」分组,手动点选一个固定节点(台湾、美国等支持地区的节点都可以,台湾、美国节点有家宽 IP)。
  2. 到「连接」页点「关闭全部」,清掉旧连接,让 Codex 用新节点重新连。

想确认 Codex 实际连到了哪台服务器,看「连接」页最右边的「目标地址」列:同一个分组在十几分钟里出现好几个不同的地址,就说明它在切换。

六、排查:从外到内,一层只回答一个问题

网络问题最忌讳一上来就改配置。正确的做法是从外到内一层层验证,每层拿到确定的证据再往下走:

层 要回答的问题 怎么查
1 Codex 的流量进没进 Clash Verge Rev? 「连接」页搜 chatgpt,看「进程」列是不是 Codex
2 出口能不能用? curl.exe -x http://127.0.0.1:7897 https://chatgpt.com/cdn-cgi/trace 看 loc=
3 出口稳不稳? 「连接」页的「目标地址」列,或多跑几次 trace 对比 ip=
4 报错到底在说什么? 读错误码,见下表
5 Codex 实际读到了哪个端口? 盘点全部配置来源(下面的命令),和「Clash 信息」卡片上的混合代理端口对照

第 1 层用到的「进程」列,科技熊下发给 Clash Verge Rev 的配置已经打开了(find-process-mode: always),能直接看到每条连接是哪个程序发起的。浏览器、Codex 桌面 App 的界面层、Codex 的后台进程各自的连接一目了然:如果只看到浏览器和界面层在连 chatgpt.com,后台进程一条都没有,就说明后台在直连,回到第二、三节处理。

第 5 层的命令(Windows PowerShell),一次把 Codex 可能读到代理的地方全查一遍:

# 当前会话、用户级、系统级的代理变量
Get-ChildItem env: | ? Name -match proxy
[Environment]::GetEnvironmentVariables("User").GetEnumerator()    | ? Name -match proxy
[Environment]::GetEnvironmentVariables("Machine").GetEnumerator() | ? Name -match proxy

# Codex 自己的文件
Get-Content $env:USERPROFILE\.codex\.env -ErrorAction SilentlyContinue
Select-String -Path $env:USERPROFILE\.codex\config.toml -Pattern proxy -ErrorAction SilentlyContinue

# 7897 端口有没有程序在监听
Test-NetConnection 127.0.0.1 -Port 7897 | Select TcpTestSucceeded

macOS / Linux 对应的是 env | grep -i proxy、cat ~/.codex/.env、grep -i proxy ~/.codex/config.toml 和 nc -z 127.0.0.1 7897 && echo ok。几处的端口不一致,Codex 会以 .env 里的为准。较新版本的 Codex 还自带诊断命令 codex doctor,它的连接性检查会列出检测到的代理变量和系统代理状态,可以和上面的手工检查互相印证。

常见报错速查

报错 含义 先查哪里
正在重新连接 n/5 / Reconnecting… 断开后的自动重试,本身不是原因 看它下面一行的具体报错
Connection failed: error sending request 请求没能发出,底层原因被包了一层 用 CLI 复现,拿到更具体的错误码
os error 10061 / 目标计算机积极拒绝 本机这个端口没有程序在监听 变量和 .env 里写的端口,是否等于「Clash 信息」卡片上的混合代理端口
os error 10060 / 连接超时 发出去了,对方一直没响应 代理没生效、在直连;切到「整机」或设环境变量
Falling back from WebSockets to HTTPS transport wss 长连接没建起来 HTTPS_PROXY 是否设了、是否生效
stream disconnected before completion 流式输出中途断开 括号里的系统错误码;「💬ChatGPT」分组是否在切换节点
HTTP 403 出口地区不在支持范围 trace 的 loc=,换台湾、美国等节点

关于 10061 值得多说一句:如果问题出在节点、出口或 OpenAI 那边,请求已经交给了 Clash Verge Rev,Codex 收到的会是 502、超时或 TLS 错误;能让 Codex 直接收到「本机端口拒绝连接」的,几乎只有一种情况——它连的那个本机端口根本没开。看到 10061,直接去查端口配置,不用再怀疑节点。

还是查不出来,可以在 Clash Verge Rev 里把诊断信息发给科技熊在线客服:客户端会把当前模式、整机代理是否开启、节点选择等状态一并带上,排查会快很多。

七、几条经验

  1. 配置来源要全量盘点。 同一个设置往往有多个来源和覆盖顺序:系统级、用户级、进程继承、程序自己的配置文件。只查「我设过的那一处」,很容易漏掉真正生效的那一处。
  2. 分清「链路通」和「程序用了这条链路」。 curl -x 手动指定端口,只能证明那个端口后面的链路是好的;要证明程序的行为,得看「连接」页的进程列和程序自己报的错。
  3. 读懂错误码,比猜原因快。 笼统的 error sending request 没有信息量,os error 10061 一句话就把范围缩到了本机端口。
  4. 能解释现象的原因,不一定是根因。 节点自动切换是真实存在的问题,也能解释重连,但解释不了 10061。每提出一个假设,都检查它能否解释全部症状。
  5. 改完配置要彻底重启。 托盘里残留的旧进程会让人误以为「改了没用」。

关于线路的选择

Codex 对网络的要求,归结起来是三点:出口落在 OpenAI 支持的地区、长连接期间不中途换出口、本机代理端口和程序配置对得上。第三点照上面的步骤做一遍就能解决,前两点取决于线路。

科技熊每个节点提供 [专线](走 BGP IEPL 专线)和经海外中转的 [备线] 两条线路,备线只按同节点专线的四分之一计流量(最低 0.5x);台湾、美国节点有家宽(住宅)IP。用 ChatGPT / Codex 需要钻石尊爵及以上套餐;希望出口只有自己在用的,可以加购家宽独享 IP(说明)。新用户有 ¥1 体验(1GB / 1 天,不含 AI 节点),可以先测一下连接质量。是否选择由你判断。

ChatGPT 网页端的访问、注册和充值问题,可以看 ChatGPT 国内怎么稳定使用;同样跑在终端里的 Claude Code,代理配置思路相近但有几处关键差别,见 Claude Code 代理配置教程。Clash Verge Rev 的分流、连接页和日志页怎么用,见 Clash Verge Rev 进阶指南。

关于科技熊工作室

重资本自建 IEPL 物理隔离专线,多链路高可用架构。对上网体验有极致追求的非主流工作室,从 2017 年起致力为全球用户提供稳定的网络加速服务。

本文最后更新:2026-10-26