news 2026/5/11 3:04:00

对接AI大模型之nginx代理配置SSE接口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
对接AI大模型之nginx代理配置SSE接口

一、背景

在对接AI大模型的时候,采用流式输出,可以较好地缓解用户等待的焦虑,但是,接口极其容易超时。

前端这时候会一直报错:

Expected content-type to be text/event-stream, Actual: text/html

而后端的错误显示是客户端断开了连接。

这里摘录其中的一段错误信息,如果你也遇到该错误,希望本文可以帮助到你。

Caused by: java.io.IOException: Broken pipe at java.base/sun.nio.ch.SocketDispatcher.writev0(Native Method)~[na:na]at java.base/sun.nio.ch.SocketDispatcher.writev(SocketDispatcher.java:66)~[na:na]at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:227)~[na:na]at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:158)~[na:na]at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:574)~[na:na]at org.xnio.nio.NioSocketConduit.write(NioSocketConduit.java:162)~[xnio-nio-3.8.16.Final.jar!/:3.8.16.Final]at io.undertow.conduits.IdleTimeoutConduit.write(IdleTimeoutConduit.java:130)~[undertow-core-2.3.18.Final.jar!/:2.3.18.Final]

二、架构图

不通过内网域名访问后端服务:

三、排查过程

1、机房B的nginx配置

第一个被怀疑的对象是机房B的nginx超时时长,因为sse接口总是60秒即超时。

机房A的nginx,我看全局的配置nginx.conf已把连接超时调整为600秒。

vi /etc/nginx/nginx.conf

而接口每到了60秒的时候就断开了。
这一点,从机房B的nginx可以看到。

所以我们尝试改大机房B的nginx的超时,ingress的配置见下:

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/proxy-connect-timeout:'600'nginx.ingress.kubernetes.io/proxy-read-timeout:'600'nginx.ingress.kubernetes.io/proxy-send-timeout:'600'

它无需重启,热加载配置生效。

2、机房A的nginx

既然机房B的nginx超时不能解决问题,试着从源头来排查。

首先,在机房A通过IP地址访问,不通过内网域名访问机房B的后端服务。

尝试后,无果。

在机房A,无论通过内网域名还是IP地址,测试后端服务的接口,都不会出现60秒即超时的异常。

curl-w"\n=== 耗时统计 ===\nDNS解析: %{time_namelookup}s\nTCP连接: %{time_connect}s\nSSL握手: %{time_appconnect}s\n首字节: %{time_starttransfer}s\n总耗时: %{time_total}s\nHTTP状态: %{http_code}\n"\-XPOST\-H"Accept:text/event-stream"\-H"Content-Type:application/json"\-d'...略'\"http://内网域名/api/v1/pub/.../chat/messages"\-o/dev/null\-s

你可以通过curl进行测试,这一点很关键,可以排查,非机房B的问题。

既然是机房A的问题,那就转换下思路。

因为机房B的后端服务,原本是kong代理对外提供服务正常的,不同的是机房A现在是使用nginx代理。

3、nginx配置

试着单独配置sse接口的反向代理,见下:

location ~ ^/ai(/api/v1/pub/.../chat/messages)${proxy_pass http://10.xxx.xxx.196:7209$1;proxy_http_version1.1;proxy_set_header Connection"";# sse 关闭缓存proxy_buffering off;proxy_cache off;chunked_transfer_encoding on;proxy_connect_timeout 600s;proxy_send_timeout 600s;proxy_read_timeout 600s;send_timeout 30s;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;}

其他接口则走默认:

location /ai/{# 注意host末尾要加斜杆,否则访问后端接口的地址会被追加/aiproxy_pass http://10.xxx.xxx.196:7209/;}

当然,proxy_pass 也可以配置内网域名。

经测试,前端访问sse接口,终于不会60秒即断开了。

三、测试验证

同样,通过curl工具,对外网接口进行测试。

curl-w"\n=== 耗时统计 ===\nDNS解析: %{time_namelookup}s\nTCP连接: %{time_connect}s\nSSL握手: %{time_appconnect}s\n首字节: %{time_starttransfer}s\n总耗时: %{time_total}s\nHTTP状态: %{http_code}\n"\-XPOST\-H"Accept:text/event-stream"\-H"Content-Type:application/json"\-d'...略'\"http://外网域名/api/v1/pub/.../chat/messages"\-o/dev/null\-s

=== 耗时统计 ===
DNS解析: 0.012s
TCP连接: 0.024s
SSL握手: 0.185s
首字节: 17.739s
总耗时: 72.965s
HTTP状态: 200

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 2:57:30

SYsU-lang:模块化编译器教学框架,从LLVM IR到操作系统编译实践

1. 项目概述:SYsU-lang,一个为教学而生的编译器框架如果你正在学习编译原理,或者对“如何从零开始构建一个编译器”感到好奇,但又苦于无从下手,那么SYsU-lang这个项目很可能就是你一直在寻找的“脚手架”。它不是一个完…

作者头像 李华
网站建设 2026/5/11 2:56:44

2026 年 .NET 客户端常用 MVVM 框架推荐(附带使用情况投票)

前言随着 .NET 客户端开发持续演进,MVVM 依然是 WPF、WinUI、Avalonia、MAUI 等技术栈中最常见的架构模式之一。进入 2026 年,社区里可选的 MVVM 框架已经相当丰富,不同框架在易用性、功能完整度、社区活跃度和适配场景上各有侧重。本文将结合…

作者头像 李华
网站建设 2026/5/11 2:54:57

AI工具搭建自动化视频生成Vault

这个话题挺有意思。做视频的人应该都有过这种体验,剪片子剪到凌晨三点,调字幕调得眼睛发酸,换BGM换了七八首还是觉得不对味儿。后来我发现了一个路子,就是用AI来搭一个自动化的视频生成管道,我管它叫“Vault”&#xf…

作者头像 李华
网站建设 2026/5/11 2:54:34

wmux:原生Windows终端复用器,集成AI与浏览器自动化

1. 项目概述:为什么我们需要一个原生的 Windows 终端复用器?如果你是一名长期在 Windows 上工作的开发者,尤其是深度依赖命令行工具和 AI 编程助手(如 Claude Code、Cursor、GitHub Copilot CLI)的开发者,那…

作者头像 李华
网站建设 2026/5/11 2:49:24

5G计费架构实战拆解:从3GPP标准到中国移动落地,漫游场景如何处理?

5G计费架构实战拆解:从国际标准到运营商落地的技术演进 当5G网络从实验室走向商用,计费系统作为运营商的核心业务支撑平台,面临着前所未有的架构变革挑战。不同于4G时代相对简单的流量计费模式,5G网络切片、边缘计算、服务化架构等…

作者头像 李华
网站建设 2026/5/11 2:42:55

汇编指令实战:从加减乘除到自增自减的底层运算逻辑

1. 为什么需要了解汇编数学运算? 记得我第一次用C语言写计算器程序时,总觉得加减乘除这些运算就像魔法一样自动完成了。直到某天调试一个数值溢出的bug,看到反汇编窗口里密密麻麻的mov和add指令,才突然意识到——原来计算机最基础…

作者头像 李华