tianx Blog →
← 全部文章

02Blog · 折腾

给 VPS 装了个手机友好的 Codex 聊天室

折腾阅读约 6 分钟
一句话总结:Faryo(开源 Codex Web UI)装好后死活登录不上,真凶有两个叠加:① 会话 cookie 带 __Host- 前缀,按浏览器规范必须走 HTTPS,纯 HTTP 下直接拒收;② 曾加 proxy_cookie_flags ~ nosecure 试图绕过,反而让 cookie 彻底失效。上了 Let's Encrypt 正式证书后,一把过。

需求

VPS 上跑着 Codex,终端里用得很爽,但出门在外只有手机。需求很明确:一个手机友好、省资源的 Web UI,能跟 VPS 上的 Codex 畅聊。

选了开源的 Faryo v1.12.0:轻量,专为 Codex 设计。架构很简单——

顺带澄清一个误会:Faryo 只是 VPS 上本地 Codex 的 Web UI,不是连接 OpenAI 服务器的工具;聊天记录存在 VPS 上、跟随账号走,手机和电脑登同一账号能看到同一份历史、互相接着聊。

故障:密码对了也登录不上

装完第一版,登录页能打开,账号密码也改成了自己的,但就是登录不上。最迷惑的是:用 curl 测试,登录返回 303(密码正确),但浏览器里就是进不去。

curl 只能证明密码正确,证明不了会话建立——而问题恰恰出在会话上。

根因分析:两个叠加的坑

坑一:__Host- 前缀 cookie 与 HTTP

Faryo 的会话 cookie 带 __Host- 前缀。根据浏览器规范,__Host- 前缀的 cookie 必须满足三个条件:Secure 标记、Path=/、且必须来自 HTTPS。纯 HTTP 下,浏览器会直接拒收这个 cookie——不管密码对错,会话永远建不起来。

坑二:画蛇添足的 nginx 配置

之前有人(就是我)加了 proxy_cookie_flags ~ nosecure,想把 Secure 标记去掉来绕过坑一。结果:__Host- 前缀要求 Secure,去掉 Secure 后 cookie 直接非法,彻底失效。越修越坏。

修复:上正式 HTTPS

正道只有一条:上 HTTPS。方案:

curl 端到端验证:登录 303 → 会话 cookie(Secure)被接受 → GET / 返回 200 Faryo 主页。旧的纯 HTTP 入口直接关闭。

经验


现在躺在沙发上掏出手机,就能让 VPS 上的 AI 接着写代码了。这大概就是折腾的意义。