Codex本身不提供HTTPS服务,需通过Nginx反向代理启用HTTPS强制跳转、SSL证书及安全响应头(如HSTS、X-Content-Type-Options),并配置本地域名与证书信任,确保前端调用正常。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

Mac版Codex本身不提供HTTPS服务,但当你将Codex作为本地AI代理网关(如通过Nginx反向代理暴露/v1/chat/completions等端点)对外提供服务时,必须为该网关启用HTTPS强制跳转与安全响应头,否则浏览器会拦截混合内容、CORS预检失败,甚至触发ERR_INVALID_REDIRECT错误——尤其在前端调用Codex API时。
生成并部署自签名SSL证书(仅限开发/测试)
这一步操作起来很简单,直接在终端执行即可,无需安装额外工具:
打开终端,运行:openssl req -x509 -newkey rsa:4096 -nodes -out codex.local.crt -keyout codex.local.key -days 365 -subj "/CN=codex.local"
证书会生成在当前目录,【务必记住保存路径,后续Nginx配置中要精确引用】。注意:-subj参数中的CN必须与你计划访问的域名一致(如codex.local),否则浏览器会报NET::ERR_CERT_COMMON_NAME_INVALID。
执行后会生成两个文件:codex.local.crt(公钥证书)和codex.local.key(私钥)。不要把.key文件上传到任何公共仓库或共享目录。
Nginx反向代理配置HTTPS与HTTP自动跳转
假设你已用Homebrew安装Nginx,并准备用codex.local作为本地访问域名(需提前写入/etc/hosts:`127.0.0.1 codex.local`)。
编辑Nginx站点配置(例如/opt/homebrew/etc/nginx/servers/codex.conf),确保包含两个server块:
① HTTPS服务块(监听443端口):
server {
listen 443 ssl http2;
server_name codex.local;
ssl_certificate /path/to/codex.local.crt;
ssl_certificate_key /path/to/codex.local.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
location / {
proxy_pass http://127.0.0.1:3000; # 假设Codex服务运行在3000端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
② HTTP重定向块(监听80端口):
server {
listen 80;
server_name codex.local;
return 301 https://$server_name$request_uri;
}
验证配置语法:sudo nginx -t;若无报错,重载配置:sudo nginx -s reload。
Symfony风格的安全头注入(适用于Nginx+PHP-FPM网关场景)
如果你的Codex网关是基于Symfony构建的(比如用Symfony CLI启动的API层),需在响应中注入HSTS、X-Content-Type-Options等头,防止中间人篡改或MIME类型嗅探攻击。
方法一:Nginx全局注入(推荐)
在HTTPS server块的location /内添加:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;<br>add_header X-Content-Type-Options nosniff always;<br>add_header X-Frame-Options DENY always;<br>add_header X-XSS-Protection "1; mode=block" always;
方法二:PHP代码层注入(仅当无法修改Nginx时)
在网关入口文件(如public/index.php)顶部附近插入:
header('Strict-Transport-Security: max-age=31536000; includeSubDomains');<br>header('X-Content-Type-Options: nosniff');<br>header('X-Frame-Options: DENY');<br>header('X-XSS-Protection: 1; mode=block');
⚠️ 注意:HSTS头只应在HTTPS响应中发送,HTTP响应里发会被忽略;且一旦浏览器收到该头,后续90天内所有对该域名的HTTP请求都会被强制转为HTTPS——【测试阶段勿在生产域名上启用HSTS】。
前端调用时绕过证书警告(仅限本地开发)
Chrome/Firefox/Safari默认拒绝自签名证书,导致fetch()失败。临时解决方法如下:
打开 https://codex.local → 点击地址栏锁图标 → “证书无效” → 查看证书 → 拖拽证书到“钥匙串访问”应用 → 双击导入的证书 → 展开“信任” → 将“使用此证书时”设为“始终信任” → 关闭窗口并输入密码确认。
这一步完成后,浏览器会接受该证书,前端JavaScript才能正常发起HTTPS请求。
重启浏览器,访问https://codex.local/v1/chat/completions应返回405(Method Not Allowed)或401(Unauthorized),证明HTTPS通道已通。


















