终端代理
Codex 代理设置
要点
问:OpenAI 官方文档对代理是怎么写的?
短答:环境变量页只写了证书相关的两项,代理变量没有单独写;沙箱联网另有开关。
下表是 2026-10-13 打开 OpenAI 开发者文档的环境变量页、配置参考页、审批与安全页整理的。Codex 更新很快,键名可能变动,用之前再看一眼官方页面。
| 文档里写了的 | 含义 |
|---|---|
| CODEX_HOME | Codex 存配置、登录状态、日志的目录,默认 ~/.codex |
| CODEX_CA_CERTIFICATE | 指向一个 PEM 证书包,给有 TLS 拦截或私有根证书的网络用,优先于 SSL_CERT_FILE |
| SSL_CERT_FILE | CODEX_CA_CERTIFICATE 没设时的后备证书路径 |
| sandbox_workspace_write.network_access | workspace-write 沙箱里执行的命令能否联网,默认关 |
| allow_upstream_proxy | 实验性的网络代理功能里的一项,默认开,让沙箱网络沿用环境里的上游代理 |
HTTPS_PROXY、HTTP_PROXY、ALL_PROXY、NO_PROXY 这几个名字,在上述几页里都没有出现。下面用的是终端程序通用的环境变量做法。
问:Codex CLI 怎么设代理?
短答:在启动 codex 的同一个终端里先设变量,再启动;关掉终端就失效。
export HTTPS_PROXY=http://127.0.0.1:7890
export HTTP_PROXY=http://127.0.0.1:7890
export NO_PROXY=localhost,127.0.0.1
codex
$env:HTTPS_PROXY = "http://127.0.0.1:7890"
$env:HTTP_PROXY = "http://127.0.0.1:7890"
$env:NO_PROXY = "localhost,127.0.0.1"
codex
7890 请改为你客户端里显示的 HTTP 或混合端口。NO_PROXY 写上本机回环地址,免得程序连本机上的服务时也被送进代理。
HTTPS_PROXY[环境变量]告诉程序访问 https 地址时先连哪个代理。① 只对设了它的终端及从这个终端启动的程序有效;② 大小写两种写法多数程序都认,两种都设了时以各程序自己的规则取用。参见:NO_PROXY。
NO_PROXY[环境变量]列出不走代理的地址,用逗号分隔。① 本机回环和内网地址放进来;② 写错会让本该走代理的请求直连。
想每次开终端都自动带上,bash 或 zsh 写进 /.bashrc、/.zshrc;Windows 可以设成用户级环境变量,但这样所有程序都会读到:
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://127.0.0.1:7890", "User")
问:代理设好了,Codex 执行的命令还是连不上,为什么?
短答:workspace-write 沙箱默认不让命令联网,和代理设没设无关。
Codex 替你跑 npm install、pip install 这类命令时,命令在沙箱里执行。官方文档写明默认的 workspace-write 模式关闭网络,要在配置文件里打开:
# ~/.codex/config.toml(Windows 在 %USERPROFILE%\.codex\config.toml)
[sandbox_workspace_write]
network_access = true
只想这一次打开,用启动参数:
codex -c sandbox_workspace_write.network_access=true
打开后,沙箱里的命令同样从环境里拿代理变量,所以上一节的变量仍要设。
问:IDE 扩展里的 Codex 怎么走代理?
短答:扩展跟着编辑器进程拿环境变量,从设好变量的终端里启动编辑器即可。
官方文档没写扩展会不会读编辑器自己的代理设置。稳妥的办法是先在终端设好上一节的变量,再在同一个终端里用 code . 打开项目,编辑器和扩展都会继承这些变量。已经开着的编辑器要整个退出再这样启动,只关窗口不够。
问:怎么确认 Codex 已经走代理、出口在哪?
短答:在同一个终端里取一次出口 IP,再到代理客户端的连接列表里找 Codex 的连接。
- 在启动 Codex 的那个终端里执行
curl https://chageejichang.co/api/chukou(Windows PowerShell 5.1 写 curl.exe)。curl 读同样的 HTTPS_PROXY,返回的 IP 和 ASN 就是这个终端的出口。本站接口打不开时,可改用第三方的curl https://ipinfo.io/json。 - 打开代理客户端的连接列表,看有没有发往 openai.com 或 chatgpt.com 的连接;有,就说明 Codex 的请求进了代理。
- 出口落在哪个地区、被检测站判成什么类型,读法见 IP 纯净度查询。
问:Windows、macOS、Linux 有哪些差别?
短答:变量写法、持久化方式和配置文件路径不同,Codex 本身的用法一样。
| 项 | Windows | macOS | Linux |
|---|---|---|---|
| 当前终端设变量 | $env:HTTPS_PROXY = "…" |
export HTTPS_PROXY=… |
export HTTPS_PROXY=… |
| 每次开终端都带上 | 用户级环境变量或 PowerShell 配置文件 | ~/.zshrc |
~/.bashrc |
| 配置文件 | %USERPROFILE%\.codex\config.toml |
~/.codex/config.toml |
~/.codex/config.toml |
| 取出口 IP | curl.exe | curl | curl |
问:不用了怎么撤销?
短答:删掉终端变量;设过用户级变量的,把它清空。
unset HTTPS_PROXY HTTP_PROXY NO_PROXY
Remove-Item Env:HTTPS_PROXY, Env:HTTP_PROXY, Env:NO_PROXY -ErrorAction SilentlyContinue
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", $null, "User")
config.toml 里加的 network_access 一行,不需要联网时删掉或改成 false。
问:走了代理仍被拒绝,问题在哪?
短答:请求已经到了 OpenAI,被拒绝的原因在出口地区或账号,不在代理设置。
接口返回地区不支持一类的错误,对照 unsupported_country_region_territory;OpenAI 公布了它支持的国家和地区,用之前先确认自己所在地在列表内并遵守其使用条款。git 这类工具也要走代理时,设法见 git set proxy。