当前位置: 首页 > news >正文

Nginx的流式响应配置

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.0proxy_set_header Connection ""; # 设置Connection为长连接;默认为:no     proxy_cache off;  # 关闭缓存;默认是:onproxy_buffering off;  # 关闭代理缓冲;默认是:onchunked_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 接收到完整的响应后,才会将其发送给客户端,因此默认是不支持流式响应,需要手动开启。

希望能帮助到你,有问题可以留言,互相学习!

http://www.lryc.cn/news/303367.html

相关文章:

  • Excel练习:双层图表
  • 2024展望龙年,索蝶音乐成立
  • 什么是 Wake-on-LAN?如何使用 Splashtop 远程喊醒电脑
  • 正则表达式的一些高级用法
  • 第3.1章:StarRocks数据导入——Insert into 同步模式
  • Docker基本使用【数据卷的挂载及常用命令】
  • 5G DTU实现燃气管道数据采集远程管理
  • 请解释Java中的代理模式,分别介绍静态代理和动态代理
  • Python 文件处理指南:打开、读取、写入、追加、创建和删除文件
  • 记录C#导出数据慢的优化方法
  • Android批量加载图片OOM问题
  • SNAT与DNAT公私网地址转换
  • 快速上手Spring Boot整合,开发出优雅可靠的Web应用!
  • MySQL高级特性篇(7)-数据库版本控制与迁移
  • js判断对象是否为空
  • 2024前端面试准备之HTML篇
  • devOps系列(八)efk+prometheus+grafana日志监控和告警
  • 考研英语单词29
  • spring-security 过滤器
  • 掌握这7种软件设计原则,让你的代码更优雅
  • Flutter自定义tabbar任意样式
  • Java设计模式【策略模式】
  • (13)Hive调优——动态分区导致的小文件问题
  • 【linux】使用g++调试内存泄露:AddressSanitizer
  • 第三百五十七回
  • 新版Java面试专题视频教程——框架篇
  • 网络爬虫实战 | 上传以及下载处理后的文件
  • Linux--shell编程中有关while循环的详细内容
  • 回归测试与重新测试
  • java 版本企业招标投标管理系统源码+多个行业+tbms+及时准确+全程电子化