Nginx的流式响应配置实现小结

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

Nginx的流式响应配置

使用ChatGPT的能力在聊天时来实现打字机效果,因此需要服务端接口进行流式响应,碰到了几个问题:

1、服务端明明配置了响应头的Content-Type为:text/event-stream,但前端仍然不是流式接收内容。

2、虽然前端能以流式接收服务端的响应内容,但内容接收完毕,长连接并未关闭,导致前端还以为服务端有数据,会一直请求服务端,最后导致超时。

最后发现是nginx的问题,由于本地对接的时候并未启用nginx,所以本地对接没有任何问题。而线上使用nginx请求转发,有些配置是有默认参数的,所以会失败。因此,在这里分享一下,如果小伙们遇到同样的问题,可以试一试。

nginx部分配置如下:

server { server_name xxxx; listen xxxx; location /xx/xx { add_header backendIP $upstream_addr; 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_http_version 1.1; # 设置http版本为1.1;默认为:1.0 proxy_set_header Connection “”; # 设置Connection为长连接;默认为:no proxy_cache off; # 关闭缓存;默认是:on proxy_buffering off; # 关闭代理缓冲;默认是:on chunked_transfer_encoding on; # 开启分块传输编码 tcp_nopush on; # 开启TCP NOPUSH选项,禁止Nagle算法 tcp_nodelay on; # 开启TCP NODELAY选项,禁止延迟ACK算法 keepalive_timeout 60; # 设定keep-alive超时时间为60秒 proxy_pass http://xxxx:xxxx; proxy_redirect off; proxy_connect_timeout 15; # 与upstream server的连接超时时间(没有单位,最大不可以超过75s) proxy_send_timeout 300; # 发送请求给upstream服务器的超时时间 proxy_read_timeout 300; # nginx会等待多长时间来获得请求的响应 } }

最主要的几个配置:

proxy_http_version 1.1;proxy_set_header Connection “”;proxy_cache off;proxy_buffering off;chunked_transfer_encoding on;

知识点:

Nginx 是通过缓存响应内容来处理请求的。也就是说,当 Nginx 接收到完整的响应后,才会将其发送给客户端,因此默认是不支持流式响应,需要手动开启。


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容