nginx配置关闭chunked

前情提要

后台有个语音流需要传给前端,注意,不是语音文件。如果是语音文件的话,可以直接使用这个chunked参数,实现视频或者音频的分段播放。

现在的问题是我们是拿到的一个音频流,要传给前端还必须是keep-alive模式。经过nginx转发的时候,nginx默认开启了chunked这个模块,造成的结果是前端用vedio原生组件接这个音频流,没有进度条。

为了实现有进度条,我们需要在响应头里面包含content-range、content-length这几个头,而content-length又和transfer-encoding头冲突了,所以造成了没有进度条的问题。

百度+谷歌

找资料如下:

  1. 第一步找资料,看为什么content-length没有生效,发现是transfer-encoding分段传输的问题取消掉Transfer-Encoding:chunkedNginx与HTTP协议,content-length

  2. 第二部找资料,关闭transfer-encoding或者客户端请求使用http1.0nginx配置关闭chunked

解决方案

一行代码关闭chunked

chunked_transfer_encoding off;
### 在 Nginx配置 SSE (服务器发送事件) 为了使 Nginx 支持并优化 SSE 请求,在配置文件中需特别注意几个方面。对于 SSE 来说,保持持久连接是非常重要的,因此需要调整 `keepalive` 参数来确保长时间的连接不会被轻易断开。 #### 配置全局设置 在全局部分可以设定一些影响所有请求的基础参数: ```nginx worker_processes auto; error_log /var/log/nginx/error.log warn; pid /run/nginx.pid; events { worker_connections 1024; # 设置单个工作进程的最大并发连接数 } ``` #### HTTP 块内的配置 HTTP 块里主要关注的是如何处理来自客户端的 HTTP 请求以及响应给客户端的内容。针对 SSE 特有的需求,这里应该加入对长链接的支持: ```nginx http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream backend_sse { server localhost:8080; # 后端提供实际SSE服务的应用程序地址 } server { listen 80; server_name example.com; location /sse/ { proxy_pass http://backend_sse/; proxy_set_header Host $host; proxy_http_version 1.1; chunked_transfer_encoding off; # 关闭分块传输编码以防止浏览器过早关闭连接 add_header 'Content-Type' 'text/event-stream'; add_header 'Cache-Control' 'no-cache'; add_header 'Connection' 'keep-alive'; tcp_nodelay on; # 减少延迟提高性能 reset_timedout_connection on; # 当客户端超时时重置连接 send_timeout 60s; # 客户端读取响应头和正文的时间限制 } } } ``` 上述配置示例展示了如何利用 Nginx 进行反向代理并将 `/sse/` 下面的所有请求转发至本地运行的服务实例上[^3]。同时设置了必要的头部信息以便于正确解析返回的数据流,并启用了 TCP 层面上的一些优化选项来改善用户体验[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值