一招解决 codex 重新连接 5 次

吴昊 2026-06-06 15:45 1

使用 codex Desktop,估计大家经常会遇到下面的情况


而且几乎每次,都是 5 次重试连接之后,都能给出响应,这 5 次重新连接让大家等待了太多时间,纯属浪费。


原因是 codex Desktop 新版升级之后(具体从哪个版本开始,具体不详),默认连接方式改成了 **WebSocket 协议。**这种连不上,它在日志中直接体现的就是 WebSocket 握手超时


为什么会这样?因为 Codex Desktop 是一个桌面应用,它不像浏览器那样会自动吃系统代理。它启动的时候,需要显式读取环境变量里的 HTTP_PROXY、HTTPS_PROXY 这些,才会走代理。如果这些变量没设,它就以为自己能直达,结果就是等半天没响应,只好进入重连循环。


以 macOS 为例



  1. 在终端里输入下面的命令查看代理信息



scutil --proxy

上面图片显示的 http,https 的代理端口都是 6152,可以手动创建,或者编辑已有的 ~/.codex/.env, 写入代理变量。


HTTP_PROXY=http://127.0.0.1:6152
HTTPS_PROXY=http://127.0.0.1:6152

编辑完 ~/.codex/.env,保存之后,退出 codex Desktop 后重新打开 codex Desktop,即可解决这个问题。


不想手搓的话,可以使用下面的 Prompt,发送给 Codex


帮我修复 Codex Desktop 一直 Reconnecting 的问题。

请定位我本机正在使用的代理端口和代理协议,然后创建或更新 ~/.codex/.env,写入以下代理配置。不要写死端口,请替换成实际端口;如果文件已经存在,保留其他配置。

HTTP_PROXY="http://127.0.0.1:<HTTP 或 mixed 端口>"
HTTPS_PROXY="http://127.0.0.1:<HTTP 或 mixed 端口>"

写入后检查配置是否正确,并告诉我需要如何重启 Codex Desktop。

当然,你也可以试一下,我的一键自动化脚本(只适用macOS)


bash


#!/bin/bash
# 检测 macOS 系统代理并更新 ~/.codex/.env

ENV_DIR="$HOME/.codex"
ENV_FILE="$ENV_DIR/.env"

# 读取系统代理配置
proxy_info=$(scutil --proxy)

http_enabled=$(echo "$proxy_info" | awk '/HTTPEnable/{print $3}')
http_host=$(echo "$proxy_info" | awk '/HTTPProxy/{print $3}')
http_port=$(echo "$proxy_info" | awk '/HTTPPort/{print $3}')

https_enabled=$(echo "$proxy_info" | awk '/HTTPSEnable/{print $3}')
https_host=$(echo "$proxy_info" | awk '/HTTPSProxy/{print $3}')
https_port=$(echo "$proxy_info" | awk '/HTTPSPort/{print $3}')

# 构建代理 URL
http_proxy=""
https_proxy=""

if [[ "$http_enabled" == "1" && -n "$http_host" && -n "$http_port" ]]; then
http_proxy="http://${http_host}:${http_port}"
fi

if [[ "$https_enabled" == "1" && -n "$https_host" && -n "$https_port" ]]; then
https_proxy="http://${https_host}:${https_port}"
fi

# 如果 HTTP 代理和 HTTPS 代理都没有
if [[ -z "$http_proxy" && -z "$https_proxy" ]]; then
echo "❌ 未检测到系统代理,当前无代理设置。"
exit 0
fi

# HTTPS 未单独设置时,复用 HTTP 代理
if [[ -n "$http_proxy" && -z "$https_proxy" ]]; then
https_proxy="$http_proxy"
fi

echo "✅ 检测到系统代理:"
[[ -n "$http_proxy" ]] && echo " HTTP_PROXY=$http_proxy"
[[ -n "$https_proxy" ]] && echo " HTTPS_PROXY=$https_proxy"

# 确保目录存在
mkdir -p "$ENV_DIR"

# 如果 .env 文件不存在,直接创建
if [[ ! -f "$ENV_FILE" ]]; then
{
[[ -n "$http_proxy" ]] && echo "HTTP_PROXY=$http_proxy"
[[ -n "$https_proxy" ]] && echo "HTTPS_PROXY=$https_proxy"
} > "$ENV_FILE"
echo "📄 已创建 $ENV_FILE 并写入代理配置。"
exit 0
fi

# 文件已存在,更新或追加
update_or_append() {
local key="$1" value="$2"
if grep -q "^${key}=" "$ENV_FILE"; then
sed -i '' "s|^${key}=.*|${key}=${value}|" "$ENV_FILE"
echo "🔄 已更新 ${key}"
else
echo "${key}=${value}" >> "$ENV_FILE"
echo "➕ 已追加 ${key}"
fi
}

[[ -n "$http_proxy" ]] && update_or_append "HTTP_PROXY" "$http_proxy"
[[ -n "$https_proxy" ]] && update_or_append "HTTPS_PROXY" "$https_proxy"

echo "✅ $ENV_FILE 已更新完成。"
最新回复 (8)
  • enget 06-06 15:54
    1

    是可解决思路之一。不过我之前配置过了,发现还是可能会出现这个问题(看日志发现大概率是tz不稳定导致的,timeout了)

  • xccx 06-06 18:09
    2

    最省心的办法其实是软路由,有废旧电脑随便搭一个就是。

  • joing 06-06 20:03
    3

    软路由和这个有什么关系?关键应该是配置 codex desktop的代理吧?

  • Magikarp4843 06-06 20:04
    4

    我还一直以为就我自己网络差呢,原来大家都一样啊

  • xccx 06-07 18:04
    5

    不懂的时候能不能不要急着否定?软路由的意思是他电脑网卡出来的所有流量,都走代理,无需区分网页浏览器,终端还是app。也就是电脑上任何地方都无须单独配置代理。

  • Apodfg 06-07 18:06
    6

    我在国外也经常这样,能用我还是先不修了,等下修坏了 ^-^

  • joing 06-07 18:18
    7

    那你说的“废旧电脑随便搭一个”是什么意思?真心求教,没反问

  • xccx 06-07 22:49
    8

    怎么搭软路由可以自己去搜,方法很多,一句两句说不清楚,以前需要自己啃帖子现在有ChatGPT了几乎没难度。


    针对你对废旧电脑的提问简单回答:

    软路由对机器性能要求很低,所以淘汰电脑拿来搭也绰绰有余,最简单没有破坏性的你可以先拿vmware装个x86的openwrt或其衍生版本虚拟机,搭旁路由。熟悉了再弄进阶玩法。


    YouTube上不良林我记得有个适合初学者的视频,你也可以搜别的。

* 帖子来源Linux.do
返回