最近,在使用 Nginx 作为反向代理处理 OpenAI Response 协议时,我遇到了一个问题:当请求处理时间超过60秒,连接就会被意外截断,即便数据仍在流式传输过程中。

这个问题在 Codex CLI 工具中的具体表现如下:

通过分析报文可以发现,连接在服务器发送标志着传输完成的event: response.completed事件之前,就被提前中断了:

经过探究,我发现问题根源在于 OpenAI Response 协议与 OpenAI 传统端点在工作方式上的差异。传统端点通常采用“请求-响应”模式,通过轮询获取结果;而 Response 协议则依赖于一个长连接来持续推送数据。

Nginx 作为代理服务器,其默认的代理读取超时时间(proxy_read_timeout)恰好是60秒。当后端(OpenAI)的响应时间超过这个阈值后,Nginx 会判定上游服务器超时并主动关闭连接,这正是导致数据流被截断的直接原因。

定位到问题根源后,解决方案就非常明确了:只需在 Nginx 的配置文件中,为相应的反向代理设置更长的超时时间即可。具体配置样例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80;
listen 443 ssl http2;
server_name 域名;

# ... 其他配置 ...

# 增加反向代理超时设置
proxy_connect_timeout 300s; # 连接上游服务器的超时
proxy_send_timeout 300s; # 发送请求到上游服务器的超时
proxy_read_timeout 300s; # 读取上游响应的超时

# ... 其他配置 ...
}

配置完再尝试发送请求,问题解决

PS:配置样例中使用的超时时间是300秒,如果你让 GPT-5 执行的任务非常复杂,建议调整为600秒