惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
S
Security Affairs
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
Microsoft Security Blog
Microsoft Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
美团技术团队
月光博客
月光博客
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
有赞技术团队
有赞技术团队
博客园 - 叶小钗
Hugging Face - Blog
Hugging Face - Blog
Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
C
Cisco Blogs
T
Tor Project blog
The Hacker News
The Hacker News
雷峰网
雷峰网
MyScale Blog
MyScale Blog
博客园 - 司徒正美
AWS News Blog
AWS News Blog
GbyAI
GbyAI
Y
Y Combinator Blog
D
DataBreaches.Net
Simon Willison's Weblog
Simon Willison's Weblog
S
Securelist
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
T
Tenable Blog
L
LangChain Blog
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium
The Cloudflare Blog
A
About on SuperTechFans
IT之家
IT之家
F
Fortinet All Blogs
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
NISL@THU
NISL@THU
爱范儿
爱范儿
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
W
WeLiveSecurity
A
Arctic Wolf
I
Intezer
Application and Cybersecurity Blog
Application and Cybersecurity Blog

明明如月成长笔记

个人数据的开源备份:从明清档案之殇想到的 简体字的双重优势:打字效率与扫盲成效全解析 四小时深圳书城奇遇:那些藏在书架间的偶然与必然 正式把我的笔记系统迁移到 Obsidian,为了和 AI 配合 Gemini CLI 登录踩坑记录:GOOGLE_CLOUD_PROJECT_ID 的坑与解法 在 MacOS 上,成功恢复存储卡上被误删的照片 AI CLI 工具:Claude Code, Codex, Gemini CLI, Qwen code, CodeBuddy cli, cursor-agent 我的常用命令 港漂日记62:父亲节独自带娃,室内游戏、香港公园探展、观鸟、品味米其林餐厅 南航随心飞机票爬虫解密 acw_sc__v2 港漂日记61:香港私立诊所首诊:商业医保如何改变我的就医体验? 香港历史博物馆:看秦始皇兵马俑,还能和孔子比身高? 港漂日记59:母亲节礼物!AI 涂色小技巧,让孩子的爱跃然纸上 港漂日记60:西营盘网红旧书店 Book & Go 淘书记 港漂日记58:萌娃中环学体操,课后老师狂点赞 五一游记D4:深圳笔架山儿童乐园,邂逅无人机送外卖 我的400篇博客都写了些什么 珊瑚海兔四岁啦 港漂日记D159:亲子同乐日:一场精彩的幼儿园嘉年华 蛇年春节自驾D10:东莞-深圳-香港 DeepSeek教我如何收拾行李箱 福田取逗留签 回港新方式 蛇年春节自驾D9:江门-顺德-东莞 中国侨都华侨华人博物馆 东莞迎宾馆 蛇年春节自驾D8:茂名-开平-江门 挥春作业 粤西堵车 开平碉楼 迎财神 茂名博物馆参观记 蛇年春节自驾D7:茂名 中国第一摊 茂名博物馆 亚朵酒店 蛇年春节自驾D6:南宁-茂名 发财树 青秀山 路途亲子游戏 蛇年春节自驾D5:南宁过大年 醒狮贺岁 三街两巷 特色美食 骑行穿城 琅西夜市 打铁花 新春好!我用DeepSeek写祝福,顺便送你三款红包封面 蛇年春节自驾D4:钦州-南宁 钦州老街,万丽年夜饭 蛇年春节自驾D3:海陵岛-钦州 绝美悬崖餐厅,海景房租赁行情 明明如月成长笔记2024年公众号创作回顾(含免费红包封面🧧) 蛇年春节自驾D2:深圳-阳江-海陵岛 明明和虹虹2024年公众号创作回顾(含免费红包封面🧧) 蛇年春节自驾D1:深圳亲子游 港漂日记D118:备战HK100,徒步港岛'恐龙径' 港漂日记D115:春节大筹备:AI 助力,书法添彩 港漂日记D114:推荐两款适合新港漂使用的app 2025新年计划之:全面拥抱AI 港漂日记D111:备战HK50 港岛径拉练 港漂日记D110:一个普通的周六见闻,聚餐、借书、儿童乐园,体育选拔机制,公共自习室,挫折教育 我的2024:辗转四城,忙碌充实 港漂日记D104:港大幸福家庭博览会,亲子工坊与未来趋势 港漂日记D101:赤柱圣诞狂欢,古迹海景遛娃 港漂日记D100:港漂百日,圣诞快乐🎄 港漂日记D97:欢乐星期天:港大访古探幽,尖沙咀购物赏景 港漂日记D96:太平山卢吉道:一次穿越山林、俯瞰繁华的震撼之行 皇马巴萨元老赛:传奇重逢,闪耀球场 港漂日记D93:宝宝居港三月余,英语表达大进步 港漂日记D90:绘本阅读,潜水展,华嫂冰室 港漂日记D89:宝妈带娃闯大馆,老友相聚话鸡娃 港漂日记D84:消防队亲子嘉年华:风车 DIY、叠杯子,奖品拿到手软! 港漂日记D83:港澳通行证:深圳换证碰壁,香港解锁秘籍 港漂日记D82:笑不活了!在 “知悭识水”嘉年华,我被自家娃的“鬼画符”征服 别再傻傻手工记账!AI 加持 beancount,效率狂飙 N 倍,真香警告 港漂日记D76:勇闯艺趣嘉年华,数数宝宝戴了几顶帽子 港漂日记D75:抵港首次学校秋游 奔赴元朗开心农场 港漂日记D73:深圳盐田周末放松游 | 高铁'灵活行'思考 | 灯塔图书馆 | 壹海城 | 盐田印象 | 港深对比 港漂日记D72:深度揭秘:我是怎么借助AI创作宝宝校庆视频的 港漂日记D71:盐田中英街漫记:海岸盛景,历史长歌 港漂日记D70:海南巨舰下香港,全民共赴海军约 港漂日记D69:完了!在香港,幼儿园小班作业居然做到晚上九点多。。。 港漂日记D68:亲子共赴嘉年华,反诈工坊入童心 港漂日记D61:哇塞!西九龙超燃嘉年华,亲子嗨玩,禁毒护航! 港漂日记D55:台风过境,顶楼泳池看海景,铜锣湾逛吃不停歇 港漂日记D50:探秘香港看病:为宝宝抢号二十次,诊疗却遭宝妈质疑 “没意义”? 港漂日记D45:复诊体验,天哪!在香港做B超居然排到了2027年。。。 港漂日记D42:香港迪士尼 x 万圣节:游客 Cosplay 百态,共赴奇趣冒险 港漂日记D32:在香港读杂志《明报周刊》《国家地理》 港漂日记D31:在校尿裤子怎么办?爷爷寄来滑板车 爸爸讲英文绘本 港漂日记D30:楼顶滑步车 画画闹情绪 拼多多发掘低价秘诀 港漂日记D29:生活的琐碎与温暖 港漂日记D28:深圳一日游 跨境巴士体验 万象天地 陶陶居 gaga 港漂日记D27:香港公园 读绘本 淘拼集运自提体验pk 睡前故事的四个阶段 港漂日记D26:幼儿园小班竟有五项作业 给工人姐姐一部手机 港漂日记D25:社区托班体验 菜鸟驿站取件 港漂日记D22:社区托班报名 中山纪念公园体育课 乔治五世纪念公园观察 港漂日记D21:东涌东荟城 大屿山双峰越野赛 辅导作业 港漂日记D20:和平号环球游轮分享会 数码港 儿童加油站 港漂日记D15:参观幼儿园,登太平山看夜景,杜莎夫人蜡像馆 港漂日记D14:长洲岛的缤纷一日:奇趣与温情交织 港漂日记D13:香港中央图书馆观察 麦当劳价格 佐治五世纪念公园 社区配套 港漂日记D12: 免费早报 宝宝报课情况 AppleTV 港漂日记D11: 回国代理,智能家居,晨间习惯 港漂日记D10: 折腾智能家具设备,HomeKit,HomeAssistant,AppleTV,米家 港漂日记D8:西区社区中心探访 困难班 辅导班 童军 港漂日记D7:北上消费,中式独居生活vs美式家庭生活,车和家,重典治乱 港漂日记D6:宝宝天星小轮,宝爸研究医保 港漂日记D5:回顾宝宝一周学习表现 港漂日记D4:宝宝生活习惯与社交的思考 港漂日记D3:香港中秋怎么放假,看亚冠,老房子水质问题 港漂日记D2:中秋铜锣湾赏灯,学校手工作品 港漂日记D1:宝宝上学,校车接送,街市买菜,安装马桶,物业规矩,垃圾处理,读报感悟 港漂日记D0:南京飞香港,禄口V7,国泰航空,光大银行送机,上海银行境外接机 在南京六朝博物馆,我看到了195件禁止出国文物中的2件 驾照过期了怎么办?原来还可以在异地轻松补办 镇江博物馆:精美的器物与缺失的展示 镇江一日游:润扬大桥,金山寺,锅盖面,镇江博物馆 扬州一日游:博物馆、历史、恐龙、雕版印刷、富春茶社 子女体育规划指南:揭秘奥运冠军对身体素质的要求 杭州萧山机场 T4 航站楼国际出发 V25 贵宾厅体验 2035年的上海是什么样子?上海城市规划展示馆绝美揭秘! 李笑来又出书了!这次只花了18美金和一天时间!深度拆解他是如何用GPT-4o快速写书的
让 Codex App 和 CLI 单独走代理:不再和 VPN 抢系统代理
不建议默认设置 NODE_TLS_REJECT_UNAUTHORIZED=0 · 2026-05-21 · via 明明如月成长笔记

一句话总结

如果你在香港或其他网络环境里使用 Codex 时需要代理,但工作内网、学校资源又经常需要 VPN,最省心的做法不是长期打开系统代理,而是只在启动 Codex App 或 Codex CLI 的那个进程里注入代理环境变量。这样代理默认可以关闭,VPN 也不用和全局代理互相打架。

我平时在香港使用 Codex,连接 GPT 服务通常需要走代理。但公司电脑还有另一个现实问题:工作时经常要拨内网 VPN,有时访问学校资源也要拨 VPN。

如果把系统代理长期打开,VPN、内网地址、学校资源和代理软件就容易互相影响。结果是:

  • 浏览器或公司内网访问可能异常;
  • 学校资源可能因为代理出口不对而打不开;
  • Codex 又可能因为 VPN 改了路由,反而连不上模型服务;
  • 每次都手动开关系统代理,很烦,也容易忘。

这几天我试了一种更简单的方式:系统代理保持关闭,只在启动 Codex App 或 Codex CLI 时,让这个进程和它的子进程带上代理配置。实测 Codex App 这条路径很有效;Codex CLI 这边我还会继续观察,但原理一致,可以先按同样方式配置。

先从 ClashX 复制终端代理命令

我用的是 ClashX。ClashX 菜单里有一个「复制终端代理命令」功能,复制出来大概是这一句:

export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890

这句话的意思是:只对当前终端会话设置代理。你可以先在一个终端窗口里执行它,然后测试命令行网络是否能走代理。

但我不建议把这句直接长期写成全局默认值。因为一旦写进 ~/.zshrc 顶层,每个终端、每个 CLI、甚至一些开发工具都可能默认走代理,问题又回到原点。

更好的做法是:把代理设置包进函数里,只有运行这个函数时才生效。

方案一:只让 Codex App 走代理

把下面这段放到 ~/.zshrc

function Codex_APP() {
    (
        export http_proxy="http://127.0.0.1:7890"
        export https_proxy="http://127.0.0.1:7890"
        export HTTP_PROXY="$http_proxy"
        export HTTPS_PROXY="$https_proxy"
        export no_proxy="localhost,127.0.0.1,::1"
        export NO_PROXY="$no_proxy"

        # App 走 Chromium/Electron 的 --proxy-server 参数即可。
        # 避免把 SOCKS / npm / TLS 相关配置误带给其他子进程。
        unset all_proxy ALL_PROXY
        unset npm_config_proxy npm_config_https_proxy
        unset NODE_TLS_REJECT_UNAUTHORIZED

        mkdir -p "$HOME/Library/Logs/com.openai.codex"
        log="$HOME/Library/Logs/com.openai.codex/manual-launch-$(date +%Y%m%d-%H%M%S).log"

        "/Applications/Codex.app/Contents/MacOS/Codex" \
          --proxy-server="http://127.0.0.1:7890" \
          > "$log" 2>&1 &
    )
}

保存后执行:

source ~/.zshrc
Codex_APP

注意:Codex App 更新很频繁,升级后通常会自带重启。升级重启拉起的新进程不会继承你手工启动时注入的环境变量/启动参数,所以这个函数方式更适合「这次启动就走代理」。如果你希望「升级重启之后也继续走代理」,更推荐用下文的 ~/.codex/.env(方案 2A)让 Codex 自己在启动时加载。

重点有三个:

  1. 外层用了 (...) 子 shell,所以这些代理环境变量只在本次启动 Codex App 时生效,不会污染当前终端。
  2. --proxy-server="http://127.0.0.1:7890" 会让 Codex App 这个 Electron/Chromium 进程走指定代理。
  3. 日志会写到 ~/Library/Logs/com.openai.codex/,如果 App 启动失败,可以先看最新的 manual-launch-*.log

上面的路径默认假设 Codex App 安装在 /Applications/Codex.app。如果你和我一样没有装到 Applications 目录,比如放在 ~/code/Codex.app,只需要改这一行:

"/Applications/Codex.app/Contents/MacOS/Codex" \

改成你的实际路径即可:

"$HOME/code/Codex.app/Contents/MacOS/Codex" \

方案二:只让 Codex CLI 走代理

方案 2A(更省事):用 ~/.codex/.env 让 Codex 默认走代理(含 WebSocket 握手)

如果你希望 Codex CLI 启动时就默认带代理(而不是先失败几次再 fallback),可以用 Codex 的 .env 配置文件,把代理地址固定写进去:

  • macOS / Linux:~/.codex/.env
  • Windows:C:\Users\你的用户名\.codex\.env

Windows 用户注意:别让系统把文件搞成 .env.txt(可能被隐藏后缀名坑到)。

文件内容示例(以 Clash 常见的 7890 为例;这一份偏“全量”,你可以按需删减):

HTTP_PROXY="http://127.0.0.1:7890"
http_proxy="http://127.0.0.1:7890"

HTTPS_PROXY="http://127.0.0.1:7890"
https_proxy="http://127.0.0.1:7890"

all_proxy="socks5://127.0.0.1:7890"
ALL_PROXY="socks5://127.0.0.1:7890"

npm_config_proxy="http://127.0.0.1:7890"
npm_config_https_proxy="http://127.0.0.1:7890"

NO_PROXY="localhost,127.0.0.1,::1"
no_proxy="localhost,127.0.0.1,::1"

这套方式的优点是:不用每次写函数/敲命令,Codex 进程一启动就拿到代理配置,WebSocket 握手也更容易一次成功,连接会更快。

另外,它也更适合「Codex 自动升级后自带重启」的场景:只要你没删这个文件,升级重启后依然会按这个默认配置继续走代理。

来源:https://x.com/Suu766/status/2058765726677385338

方案 2B(可切换):用 ~/.zshrc function 只在这次启动时走代理

如果你想保留「默认直连,只有需要时才走代理」的体验,或者希望一键切换直连/代理,那么用函数把代理包在子 shell 里仍然是最稳的方式。把下面这段放到 ~/.zshrc

function Codex_CLI() {
    (
        export http_proxy="http://127.0.0.1:7890"
        export https_proxy="http://127.0.0.1:7890"
        export HTTP_PROXY="$http_proxy"
        export HTTPS_PROXY="$https_proxy"
        export all_proxy="socks5://127.0.0.1:7890"
        export ALL_PROXY="$all_proxy"
        export npm_config_proxy="$http_proxy"
        export npm_config_https_proxy="$https_proxy"
        export no_proxy="localhost,127.0.0.1,::1"
        export NO_PROXY="$no_proxy"

        codex "$@"
    )
}

之后启动 CLI:

source ~/.zshrc
Codex_CLI

如果你确实清楚自己在做什么,并且需要临时跳过审批/沙箱,可以在调用时显式加参数(不建议写成默认):

Codex_CLI --dangerously-bypass-approvals-and-sandbox

.env vs .zshrc function 怎么选?

维度 ~/.codex/.env(方案 2A) ~/.zshrc function(方案 2B)
默认行为 Codex 默认走代理 默认直连,按需用函数走代理
作用范围 仅 Codex(持久生效) 仅本次启动(子 shell,不污染当前终端)
WebSocket 握手 启动即生效(更少失败/更快) 启动即生效(但需要你用函数启动)
适用对象 主要是 Codex CLI Codex CLI(以及 App 的进程级启动方式)
升级重启 升级后重启仍有效(默认配置会被重新加载) 升级后重启可能失效(新进程不一定继承你注入的 env)
切换成本 需要改/临时改名 .env 换命令调用即可

我个人建议:

  • 长期都需要代理,而且希望 Codex 启动“丝滑”→ 用 .env 作为默认方案。
  • 经常在直连/代理之间切换,或者只在少数场景需要代理 → 用 .zshrc function 更灵活。

有些代理环境里,为了绕过证书问题,会看到这句:

export NODE_TLS_REJECT_UNAUTHORIZED="0"

这会让 Node.js 跳过 TLS 证书校验。它确实可能临时绕过一些公司代理或中间人证书问题,但安全风险很高,不建议默认写进函数。

如果你的环境确实必须这样才能跑通,建议只在临时排障时加,并且明确知道自己在做什么。日常配置里,能不加就不加。

为什么这比开系统代理更稳

这套配置的核心是「进程级代理」:

  • Codex App 通过环境变量和 --proxy-server 走代理;
  • Codex CLI 通过环境变量走代理;
  • 其他应用、浏览器、内网工具、学校 VPN 不受影响;
  • 代理软件可以继续在本机监听 127.0.0.1:7890,但系统代理不需要长期打开。

这样做以后,日常使用路径会变成:

  1. ClashX 保持运行,本地代理端口可用;
  2. macOS 系统代理默认关闭;
  3. 需要 Codex App 时运行 Codex_APP
  4. 需要 Codex CLI 时运行 Codex_CLI
  5. 工作 VPN、学校 VPN 按原来的方式拨号,不再因为全局代理互相干扰。

快速排查

如果配置后 Codex 仍然不能用,可以按下面顺序检查:

  1. 确认 ClashX 本地端口。 默认常见是 127.0.0.1:7890,但你自己的配置可能不同,以 ClashX 复制出来的终端代理命令为准。
  2. 确认 App 路径。 如果不是 /Applications/Codex.app,一定要改成实际路径。
  3. 看启动日志。 Codex App 函数会把日志写到 ~/Library/Logs/com.openai.codex/
  4. 确认函数是否生效。 修改 ~/.zshrc 后,要执行 source ~/.zshrc,或者新开一个终端窗口。
  5. 不要同时开太多层代理。 如果系统代理、VPN、ClashX TUN、终端代理同时开启,排查会变得很困难。建议先从「系统代理关闭 + 只用函数启动 Codex」开始。

小结

对我来说,这个方案解决的是一个很具体但高频的问题:Codex 需要代理,工作和学校资源又需要 VPN,系统级代理一开就容易互相影响。

把代理限制在 Codex App / CLI 启动进程里之后,默认网络环境保持干净,只有 Codex 自己走代理。需要时一条命令启动,不需要时完全不影响其他程序。

这类小配置不复杂,但能显著减少每天在代理、VPN、CLI 之间来回切换的摩擦。