AI 专题教程进阶用户

Codex 稳定机场:Codex CLI 与 IDE 插件的代理配置

Codex CLI 和 IDE 插件只开系统代理时常卡在 Reconnecting。本文对照 OpenAI 官方文档与开源代码,讲清环境变量、TUN、IDE 代理三种接法的取舍,附 PowerShell 与 bash/zsh 示例、断流排查和机场节点选择原则。

小鱼先看结论

默认配置下,Codex 优先使用的 WebSocket 连接只读取 HTTPS_PROXY、HTTP_PROXY、ALL_PROXY 等环境变量,不读系统代理,所以只开代理客户端的系统代理时,常见 Reconnecting、超时或回落到 HTTPS。最直接的做法是在启动 Codex 的终端里把 HTTPS_PROXY 设为本地 HTTP 端口(如 http://127.0.0.1:7897);IDE、WSL 和多个命令行工具都要走代理时改开 TUN。节点出口要在 OpenAI 支持地区内(使用者本身也须在支持地区),并为 Codex 手动固定一个晚高峰稳定的节点。

  • Codex 的 WebSocket 连接只读取代理环境变量,系统代理开关对它无效
  • 环境变量最精确,TUN 覆盖最全,IDE 代理设置依赖扩展实现、最不可控
  • 代理地址写 http://127.0.0.1 加端口,不要写成 https:// 或 socks5://
  • “Reconnecting... waiting for network”多半是代理端口连不上,带计数的 Reconnecting 多半是连接中途断开
  • 出口要在 OpenAI 支持地区内,AI 流量用手动选择的策略组,避免自动切换打断长任务
适合
Lv.3 进阶用户
适用版本
Codex CLI 0.162.1 · Windows / macOS / Linux
阅读
9 分钟
版本核对

使用前请了解服务条款

ChatGPT、Claude、Gemini 等服务只在官方公布的国家和地区提供。从不受支持的地区访问可能违反服务条款,并导致账号受限或封禁。本文只讨论网络连接的稳定性,地区与政策信息以官方页面为准。小鱼网络与 OpenAI、Anthropic、Google 均无关联。
AI 专题栏目封面插画:粉彩渐变的天空、云朵、星星与星球
文章目录(7 节)
  1. 先说结论
  2. Codex 怎么安装、会连哪些地址
  3. 为什么终端程序不走系统代理
  4. 三种接入方式怎么选
  5. 方式一:设置代理环境变量
  6. 方式二:开启 TUN 模式
  7. 方式三:在 IDE 中设置代理
  8. 长连接和流式输出中断怎么排查
  9. Codex 用什么节点更稳
  10. 总结

让 Codex CLI 稳定走代理

约 15 分钟
  1. 确认本地代理端口

    在代理客户端的设置里找到 HTTP 或混合代理端口(Clash Verge Rev 默认 7897),并在 AI 策略组里手动选定一个节点。

  2. 选择接入方式

    只在终端里用 Codex 时设置环境变量;IDE、WSL 和多个命令行工具都要走代理时开启 TUN 模式。

  3. 设置环境变量或开启 TUN

    在启动 Codex 的终端里把 HTTPS_PROXY 和 HTTP_PROXY 设为 http://127.0.0.1 加端口,或在客户端里安装服务后打开虚拟网卡模式。

  4. 用 curl 验证连通

    通过同一个端口访问 chatgpt.com,能返回 HTTP 状态码说明代理通路正常;超时或拒绝连接说明端口或客户端有问题。

  5. 登录并跑一个短任务

    运行 codex login status 确认登录状态,再执行一个简单任务,观察是否出现 Reconnecting 提示。

先说结论

Codex 连不上、反复显示 Reconnecting,多数时候不是机场坏了,而是 Codex 进程根本没有走代理。代理客户端的“系统代理”开关只对主动读取系统设置的程序有效,而 Codex 优先使用的 WebSocket 连接只认 HTTPS_PROXY、HTTP_PROXY、ALL_PROXY 这类环境变量。

解决办法有三种:设置环境变量(精确)、开启 TUN 模式(覆盖全部程序)、在 IDE 里设置代理(方便但不可控)。节点出口要在 OpenAI 的支持地区内,并为 Codex 手动固定一个晚高峰稳定的节点。AI 场景选机场的整体方法见专题主文章 AI 稳定机场怎么选,本文专讲 Codex 的代理配置和排障。

Codex 怎么安装、会连哪些地址

Codex CLI 是 OpenAI 开源的命令行编程工具。2026-10-15 核对 GitHub Release,最新正式版为 0.162.1(2026-10-09 发布)。官方仓库 README 给出的安装方式如下:

# macOS / Linux:官方安装脚本
curl -fsSL https://chatgpt.com/codex/install.sh | sh

# 通过 npm 安装(需要先装好 Node.js)
npm install -g @openai/codex

# macOS:通过 Homebrew 安装
brew install --cask codex
# Windows:官方安装脚本(在 PowerShell 中运行)
powershell -ExecutionPolicy ByPass -c "irm https://chatgpt.com/codex/install.ps1 | iex"

官方脚本默认从 releases.openai.com 下载,失败时回落到 GitHub Releases。下载卡住时,先在同一个终端里设置好下文的代理变量再重试。

编辑器方面,官方文档说明 VS Code、Cursor、Windsurf 使用 Codex 扩展,JetBrains 系列和 Xcode 则由 IDE 自己提供集成。从官方仓库的 issue 讨论看,扩展在后台调用的也是 Codex 程序,下文关于环境变量的结论同样适用。

Codex 主要连接下面三个域名(取自开源代码中的地址):

域名 用途
chatgpt.com 用 ChatGPT 账号登录后的模型请求;安装脚本也在这里
auth.openai.com 登录授权、换取令牌
api.openai.com 使用 API Key 时的模型请求

codex login 会打开浏览器授权,回调地址是本机的 localhost:1455;没有浏览器的远程环境可以用 codex login --device-auth 设备码登录(官方标注为 beta,需先在 ChatGPT 安全设置里开启)。授权页走浏览器的代理,换取令牌却由 Codex 进程完成,所以浏览器显示成功、终端报错时,要查 Codex 进程的网络。

为什么终端程序不走系统代理

“系统代理”只是操作系统里的一项设置,程序要主动读取才会生效。浏览器会读;命令行程序大多按惯例读取 HTTPS_PROXY、http_proxy 这类环境变量。

Codex 的情况更具体一些。查阅它 2026 年 10 月的开源代码可以确认,在默认配置下:

  • WebSocket 连接只读环境变量。 Codex 默认优先用 WebSocket 接收模型输出,代码注释写明,其默认拨号逻辑解析的是 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY 和 NO_PROXY。
  • HTTPS 请求可能读到系统代理,但没有保证。 普通 HTTPS 请求使用的 Rust 网络库,在没有环境变量时可能会读取 macOS 或 Windows 的手动代理设置,但官方文档没有承诺这一点;能完整读取系统代理(包括 PAC 自动配置)的功能开关仍标记为开发中,默认关闭。
  • 官方文档没有介绍代理变量。 环境变量文档只列出了 CODEX_CA_CERTIFICATE、SSL_CERT_FILE 这类证书变量。

结果就是“时好时坏”:只开系统代理时,部分 HTTPS 请求能通,WebSocket 却超时,界面先出现带计数的 Reconnecting...,几轮后提示 Falling back from WebSockets to HTTPS transport。官方仓库的 issue #29958 记录了 Windows 上的同类现象,设置代理变量后恢复正常。系统代理和 TUN 在原理上的差别,见 TUN 模式和系统代理有什么区别。

三种接入方式怎么选

方式 覆盖范围 需要的权限 优点 不足 适合场景
环境变量 设置了变量的终端及其启动的程序 不需要 只影响需要代理的程序,容易排查 每个终端都要配;图形界面启动的 IDE 不一定继承 主要在终端里用 Codex
TUN 模式 几乎所有程序 管理员权限或服务模式 一次开启,WebSocket、HTTPS 和子进程全覆盖 改动路由和 DNS,可能与公司 VPN 冲突 IDE、WSL 和多个命令行工具同时用
IDE 代理设置 取决于扩展是否把设置传给 Codex 不需要 只改编辑器里的一项设置 行为未写进官方文档,可能随版本变化 临时补救

方式一:设置代理环境变量

先确认代理客户端的本地端口:Clash Verge Rev 的混合端口默认是 7897,其他客户端请在设置里查看 HTTP 或混合端口(客户端的安装和基础设置见 Clash 使用教程)。下面的示例都以 7897 为例。

PowerShell(Windows)

# 只对当前 PowerShell 窗口生效;7897 换成你客户端里的 HTTP / 混合端口
$env:HTTP_PROXY  = "http://127.0.0.1:7897"
$env:HTTPS_PROXY = "http://127.0.0.1:7897"
$env:NO_PROXY    = "localhost,127.0.0.1"
codex

# 查看当前窗口里的代理变量
Get-ChildItem Env: | Where-Object Name -like "*_PROXY"

想让每个新窗口自动带上,可以把前三行写进 PowerShell 配置文件(notepad $PROFILE)。也可以写入用户级环境变量,但这会影响所有程序,代理客户端一退出它们就连不上网:

# 写入用户级环境变量(对之后新启动的程序生效)
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://127.0.0.1:7897", "User")
[Environment]::SetEnvironmentVariable("HTTP_PROXY",  "http://127.0.0.1:7897", "User")

# 不再需要时删除
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", $null, "User")
[Environment]::SetEnvironmentVariable("HTTP_PROXY",  $null, "User")

bash / zsh(macOS、Linux、WSL)

# 只对当前终端生效
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
codex

# 也可以只对这一条命令生效
HTTPS_PROXY=http://127.0.0.1:7897 codex

需要经常开关的话,可以在 ~/.zshrc 或 ~/.bashrc 里写两个函数:

proxy_on() {
  export HTTP_PROXY=http://127.0.0.1:7897
  export HTTPS_PROXY=$HTTP_PROXY
  export http_proxy=$HTTP_PROXY https_proxy=$HTTP_PROXY   # 给只认小写的工具
  export NO_PROXY=localhost,127.0.0.1
}
proxy_off() {
  unset HTTP_PROXY HTTPS_PROXY http_proxy https_proxy NO_PROXY
}

大小写各设一份,是因为 curl 文档写明 http_proxy 只认小写;Windows 的环境变量不区分大小写,不需要这样做。另外三个细节:

  • 代理地址写 http://,不要写成 https://:本地端口说的是普通 HTTP 代理协议,写成 https 会握手失败。
  • 不要写 socks5://:官方文档没有说明支持,几条连接路径的处理也不一致。
  • NO_PROXY 里放本机地址,避免本机上的服务(例如本地 MCP 服务)被转发到代理。

只给 Codex 用:写进 ~/.codex/.env

Codex 启动时会读取 CODEX_HOME(默认 ~/.codex)下的 .env 文件,把其中的变量加入自己的环境(以 CODEX_ 开头的会被忽略)。这是开源代码中的行为,官方文档尚未说明。写在这里就不必改动整个终端的环境:

# macOS / Linux:~/.codex/.env
# Windows:%USERPROFILE%\.codex\.env
HTTP_PROXY=http://127.0.0.1:7897
HTTPS_PROXY=http://127.0.0.1:7897
NO_PROXY=localhost,127.0.0.1

缺点是容易被遗忘:客户端换了端口或没有运行时,Codex 会一直显示 Reconnecting... waiting for network,Windows 上还可能报 os error 10061(拒绝连接),见 issue #44517。

方式二:开启 TUN 模式

TUN 模式让代理客户端创建一块虚拟网卡,接管整台电脑的流量。Codex 的 WebSocket、HTTPS 请求以及它启动的子进程都会经过客户端,不需要任何环境变量。在 Clash Verge Rev 里,先在设置中安装服务,再打开“虚拟网卡模式”;Windows 上的具体步骤和安全软件拦截问题,见 Windows 用哪个 Clash。

优点

  • 一次开启,所有终端、IDE 和子进程都生效
  • 不用关心程序是否读取代理变量
  • WebSocket 与 HTTPS 走同一条路径,现象更一致

不足

  • 需要管理员权限或服务模式
  • 会改动系统路由和 DNS,可能与公司 VPN、其他虚拟网卡冲突
  • 所有流量都要经过分流规则,规则写错时影响面更大

使用 TUN 时注意三点:

  1. 规则模式下确认命中代理组。 在客户端的“连接”页搜索 chatgpt.com,确认命中的是 AI 策略组,而不是 DIRECT。
  2. fake-ip 会改变本地解析结果。 开启 TUN 后,nslookup 查到 198.18 开头的地址是客户端返回的虚拟地址,属于正常现象。
  3. WSL2 不一定被接管。 开启后在 WSL 里不设代理变量、直接用 curl 测一次再下结论。

方式三:在 IDE 中设置代理

扩展里的 Codex 能不能走代理,取决于扩展启动 Codex 时给了它什么环境变量。目前能确认的有两条:

  • VS Code 官方的网络文档提醒,扩展并不能完全享受编辑器内置的代理支持;
  • 官方仓库的 issue #6764 中,有用户分析扩展代码后发现,扩展会把 VS Code 的 http.proxy 设置作为 HTTP_PROXY 和 HTTPS_PROXY 传给 Codex,但不会传 http.noProxy;同一讨论里也有用户反馈,扩展会读取 ~/.codex/.env 中的代理变量。

所以可以先在 settings.json 里加上代理设置,再从命令面板执行“Developer: Reload Window”重新加载窗口:

{
  "http.proxy": "http://127.0.0.1:7897"
}

如果不生效,依次换用:把代理写进 ~/.codex/.env;完全退出编辑器后,从已设置代理变量的终端执行 code . 启动;最后是开启 TUN。这些都不是官方文档写明的行为,扩展升级后最好重新验证。JetBrains 和 Xcode 里的 Codex,以各自 IDE 的文档为准。

远程开发:Remote-SSH 与 WSL

用 Remote-SSH 或 WSL 打开项目时,Codex 运行在远程主机或 Linux 环境里,代理要配在 Codex 实际运行的那一侧。

Remote-SSH:如果服务器本身不能访问 OpenAI,可以用 SSH 反向端口转发,把服务器上的一个端口转到本机的代理客户端:

# 在本机执行:服务器上的 127.0.0.1:7897 会被转发到本机的 7897 端口
ssh -R 7897:127.0.0.1:7897 user@your-server

# 在服务器上执行,或写进服务器的 ~/.codex/.env
export HTTPS_PROXY=http://127.0.0.1:7897

用 VS Code Remote-SSH 时,在本机 ~/.ssh/config 对应主机下加一行 RemoteForward 7897 127.0.0.1:7897 即可自动转发。服务器上的其他用户也能使用这个端口,只在自己控制的服务器上这样做。

WSL2:Codex 文档说明,在 WSL2 里 Codex 运行在 Linux 环境中。WSL2 默认使用 NAT 网络,其中的 127.0.0.1 指向 Linux 自己,而不是 Windows 上的代理客户端。按微软文档有三种做法:

做法 适用条件 设置方法
镜像网络模式 Windows 11 22H2 及以上 在 .wslconfig 中设置 networkingMode=mirrored,之后在 WSL 里用 127.0.0.1 就能连到 Windows
自动同步代理 Windows 11 22H2 及以上 在 .wslconfig 中设置 autoProxy=true,让 WSL 使用 Windows 的 HTTP 代理设置
NAT 模式下改用主机 IP 不限 在 WSL 里查到 Windows 主机的 IP,代理客户端开启“允许局域网连接”
# %USERPROFILE%\.wslconfig;修改后在 PowerShell 执行 wsl --shutdown 重启 WSL
[wsl2]
networkingMode=mirrored
# NAT 模式:查出 Windows 主机的 IP,再把代理指向它
HOST_IP=$(ip route show | grep -i default | awk '{ print $3 }')
export HTTPS_PROXY=http://$HOST_IP:7897

“允许局域网连接”会让同一网络里的其他设备也能使用你的代理端口,只在可信网络里开启。

长连接和流式输出中断怎么排查

Codex 的一次任务可能持续几分钟甚至更久,模型输出是边生成边推送的,期间连接必须一直保持。先根据提示判断问题出在哪一层:

提示 含义 常见原因
Reconnecting... waiting for network 连接建立不起来,Codex 会持续等待网络恢复再重试 代理端口写错、代理客户端没运行(Windows 常伴随 os error 10061)、Codex 没走代理
带计数的 Reconnecting... 提示 请求或输出流在中途失败,正在按次数重试 节点自动切换、晚高峰丢包、线路掐断长连接
Falling back from WebSockets to HTTPS transport WebSocket 多次失败后改用 HTTPS 传输 WebSocket 没有走代理(例如只开了系统代理),或节点对长连接不稳定
stream disconnected before completion 输出还没结束,连接就断了 与上一行类似,多在重试用尽后出现
error sending request for url 请求没能发出去 DNS 被干扰、代理不可达、证书问题
证书校验失败 TLS 证书无法验证 公司网络做了 HTTPS 解密,按官方文档设置 CODEX_CA_CERTIFICATE,不要关闭证书校验

官方配置参考列出的默认值是:输出流中断最多重试 5 次,HTTP 请求最多重试 4 次,输出流 300000 毫秒(5 分钟)无数据即判定超时。这几项只能在自定义模型提供方里修改,内置的 OpenAI 提供方不能覆盖,所以解决中断要从网络入手,而不是调参数。

验证代理通路时,用 curl 走和 Codex 相同的端口:

# macOS / Linux / WSL:能输出三位 HTTP 状态码,说明代理通路正常
curl -x http://127.0.0.1:7897 -sS -o /dev/null -w "%{http_code}\n" https://chatgpt.com
# Windows:写 curl.exe,避开 Windows PowerShell 5.1 里同名的 Invoke-WebRequest 别名
curl.exe -x http://127.0.0.1:7897 -sS -o NUL -w "%{http_code}" https://chatgpt.com

返回 200、403 之类的状态码,都说明请求经代理到达了服务器;超时或 Connection refused,说明端口不对或客户端没运行。之后按下面的顺序排查:

  1. 确认 Codex 拿到了代理变量

    PowerShell 用 Get-ChildItem Env: 查看,bash/zsh 用 env | grep -i _proxy 查看。同时打开 ~/.codex/.env,确认没有指向旧端口的残留配置。

  2. 确认 curl 能走通同一个端口

    curl 都走不通时,问题在代理客户端或节点,先不要怀疑 Codex。

  3. 在客户端的连接页看出口

    在代理客户端的“连接”页搜索 chatgpt.com,确认命中的是 AI 策略组和固定节点,而不是 DIRECT 或自动测速组。连接频繁关闭又重建,说明节点或线路不稳。

  4. 固定节点后在晚高峰复现

    关闭 AI 流量的自动切换,在 20:00–23:00 跑一个十几分钟的任务。仍然频繁中断,就该换线路了。

  5. 查看日志

    日志目录默认是 ~/.codex/log(可用配置项 log_dir 修改),codex login 会在这里写入 codex-login.log。可以用 codex exec --skip-git-repo-check "只回复 OK" 做一次非交互的快速测试;需要更详细的输出时,设置官方文档列出的 RUST_LOG 变量。

命令联网失败不一定是代理问题

Codex 在工作区写入沙箱里执行命令时,默认不允许联网(配置项 sandbox_workspace_write.network_access)。npm install、pip install 这类命令失败时,先确认是不是沙箱限制,再去查代理。

Codex 用什么节点更稳

出口要在 OpenAI 支持地区内。 OpenAI 公布的 支持国家和地区 共 208 个,不含中国大陆、香港和澳门,页面写明从不受支持的地区访问可能导致账号被封禁或停用。代理只改变网络出口,不改变你所在的地方,请结合所在地法律和服务条款自行判断;ChatGPT 侧的地区细节见 ChatGPT 用什么机场稳定。

稳定优先于速度,并且手动固定。 Codex 传输的主要是代码和文字,对带宽要求不高,影响体验的是晚高峰丢包和长连接能否保持,优先选专线或优质中转(原理见 IEPL 是什么)。给 AI 单独建一个手动选择的策略组(写法见专题主文章),把 openai.com 和 chatgpt.com 两个后缀分进去,就覆盖了上文的三个域名;同地区的备用节点只在两次任务之间切换。

其他 AI 工具要单独核对地区,例如香港出口在 Gemini 应用里可用、在 Gemini API 里不可用,详见 Gemini 机场推荐。

总结

Codex 走代理的关键,是让 Codex 进程拿到 HTTPS_PROXY:只在终端里用,就设置环境变量或写进 ~/.codex/.env;IDE、WSL 一起用,就开启 TUN;IDE 自带的代理设置只作补充。出现 Reconnecting 时,先分清“连不上”还是“中途断”,前者查端口和变量,后者查节点切换和线路。节点出口要在 OpenAI 支持地区内,手动固定、晚高峰稳定,比测速快更重要。

常见问题

开了系统代理,浏览器能用 ChatGPT,为什么 Codex 还是连不上?

Codex 优先使用的 WebSocket 连接只读取 HTTPS_PROXY 等环境变量,不读取系统代理。在启动 Codex 的终端里设置代理环境变量,或者开启 TUN 模式即可。

HTTPS_PROXY 可以写 socks5 地址吗?

不建议。Codex 文档没有说明对 SOCKS 代理的支持,几条连接路径的处理也不完全一致。Clash 系客户端的混合端口同时支持 HTTP,直接写 http://127.0.0.1 加端口最稳妥。

开了 TUN 还需要设置环境变量吗?

不需要,二选一即可。两者同时开启通常也能工作,但排查问题时建议只保留一种,避免分不清流量是从哪条路径出去的。

Codex 执行 npm install、pip install 时连不上网,是代理问题吗?

不一定。Codex 在工作区写入沙箱里执行命令时默认不允许联网,需要在配置里通过 sandbox_workspace_write.network_access 主动开启。先确认是不是沙箱限制,再排查代理。

香港节点能用 Codex 吗?

不在支持范围内。Codex 属于 OpenAI 的服务,OpenAI 公布的支持国家和地区不含香港、澳门和中国大陆,页面写明从不受支持的地区访问可能导致账号被封禁或停用。

WSL 里的 Codex 怎么用 Windows 上的代理?

WSL2 默认的 NAT 网络里,127.0.0.1 指向 Linux 自己而不是 Windows。Windows 11 22H2 及以上可以开启镜像网络模式,让 127.0.0.1 直接连到 Windows;否则要改用 Windows 主机的 IP,并在代理客户端里允许局域网连接。

参考资料

  1. openai/codex 官方仓库(安装方式)
  2. Codex 文档:环境变量
  3. Codex 文档:配置参考
  4. Codex 文档:登录与认证
  5. Microsoft Learn:使用 WSL 访问网络应用

内容编辑与测试

小鱼网络编辑部负责站内文章的选题、测试与审校。我们长期跟踪机场服务、代理客户端、网络线路与 AI 服务的可用性变化,所有教程都会注明适用版本与核对时间,并在内容变化时更新记录。

本文遵循 小鱼网络评测方法与商业披露。发现错误或信息过期?欢迎 告诉我们。

下一步建议

  1. 系统学习:回到专题主文章《AI 稳定机场怎么选:四个 AI 平台的地区与网络要求》,按顺序补齐相关知识。
  2. 还没想好用哪家?先看 2026 年稳定机场选购方法,再用 对比表 按自己的需求筛选。
  3. 已经有机场但用得不顺?从 客户端知识 和 网络知识 里找对应的排查方法。

✦ 小鱼严选机场

严选入选理由见各自的“为什么选择”文章;本站尚未完成实测的机场会在资料页注明。部分服务商链接为推广链接(rel="sponsored"),我们可能因此获得佣金,但不影响评测结论。详见评测方法与商业披露。