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.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 接收到完整的响应后,才会将其发送给客户端,因此默认是不支持流式响应,需要手动开启。

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

相关推荐

  1. Nginx响应配置

    2024-02-22 17:34:04       48 阅读
  2. flask响应

    2024-02-22 17:34:04       48 阅读
  3. 前端(stream)请求,获取持续响应方式

    2024-02-22 17:34:04       42 阅读
  4. 设置Nginx响应超时配置

    2024-02-22 17:34:04       36 阅读
  5. Nginx配置详解

    2024-02-22 17:34:04       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-22 17:34:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-22 17:34:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-22 17:34:04       82 阅读
  4. Python语言-面向对象

    2024-02-22 17:34:04       91 阅读

热门阅读

  1. python子域名收集工具

    2024-02-22 17:34:04       49 阅读
  2. Web应用程序的自动测试工具WebDriver简介

    2024-02-22 17:34:04       53 阅读
  3. k8s-创建命名空间的方法

    2024-02-22 17:34:04       40 阅读
  4. Unity单元测试

    2024-02-22 17:34:04       56 阅读
  5. 基于Mocha的typescript调试教程

    2024-02-22 17:34:04       51 阅读
  6. windows系统用VS环境开发linux程序之一

    2024-02-22 17:34:04       53 阅读
  7. 一些内网渗透总结

    2024-02-22 17:34:04       54 阅读