DeepFloodbeta

【经验】解决Nginx反向代理OpenAI Response协议60秒超时中断的问题

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

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

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

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

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

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

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秒

  • 谢谢,学习了。