nginx 转发数据流文件

这篇具有很好参考价值的文章主要介绍了nginx 转发数据流文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.问题描述

后端服务,从数据库中查询日志,并生成表格文件返回静态文件。当数据量几兆时,返回正常,但是超过几十兆,几百兆,就会超过网关的连接超时时间30秒。

时序图

nginx 转发数据流文件,1024程序员节

 这里面主要花费时间的地方在:

1后台服务器,将数据格式化,写到本地的文件的过程

2后台服务器将文件发送到网关,网关整体接收完

3网关将文件整体接收完后,转发给nginx

4nginx整体缓存文件后发送给浏览器

5浏览器下载从nginx发送的文件

也就是说,一个大文件,需要下载四次才能真正到达用户本地!可想而知多慢

2.解决思路

        1.优化sql查询,优化数据处理

        但是明显即使优化sql查询,优化数据处理,也快不了多少。但不是没有优化的可能。

        首先,sql查询优化,查询下时候有慢查询,查询语句是否是慢查询,索引是否有效,索引是否在where 和select中。

        2.减少文件下载的次数

        只下载一次!数据流返回,边查询,边返回,浏览器自己下载。而且这样最不一样的地方是,http请求是立马返回的,所以不存在超时的可能。

nginx 转发数据流文件,1024程序员节

 可以看到,文件只在浏览器下载一次,后台查询数据,是每次只查询一部分数据,并在格式化后就返回,nginx也是接到一部分数据就立马返回,浏览器接到一部分数据就开始下载,让整个http请求立马结束,这样不会超时,但是文件会一直慢慢下载。

nginx配置:

location log {
proxy_pass http://server:111/log;
proxy_cache off;
proxy_buffering off;
chunked_transfer_encoding on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 300;
}
  • proxy_cache off;:这一行禁用了Nginx的代理缓存。这意味着每次请求都会直接发送到后端服务器,而不会在Nginx中缓存结果。
  • proxy_buffering off;:这一行禁用了Nginx的代理缓冲。这意味着Nginx不会预先读取请求的内容,而是在每个请求/响应循环中仅读取实际需要的数据。
  • chunked_transfer_encoding on;:这一行允许使用分块传输编码。这是一种允许不一次将所有数据发送给客户端,而是分块发送的技术。这对于大数据传输非常有用。
  • tcp_nopush on;:这一行禁止Nginx使用TCP推送(push)选项。这通常用于告诉浏览器不要缓存数据。
  • tcp_nodelay on;:这一行设置TCP的nodelay选项为on,这通常用于控制数据流是否应该立即发送。
  • keepalive_timeout 300;:这一行设置保持活动连接的超时时间为300秒。这意味着,如果客户端和服务器之间的连接在300秒内没有任何活动,连接将会关闭。

然后,前端也要将数据流接到。后端的返回也需要是数据流的形式返回,每次只返回一部分。因为涉及到前端,nginx反向代理服务器和后端服务器,所以往往需要前端和后端同事一起配合才行。

后端设置 的响应头:文章来源地址https://www.toymoban.com/news/detail-735970.html

# 告诉代理或浏览器,这是分段下载的数据
"Transfer-Encoding": "chunked"
# 告诉代理或浏览器,这是未知类型的数据流文件, utf-8-sig编码让excel默认打开不会乱码
"Content-Type": "application/octet-stream; charset=utf-8-sig"
# 强制浏览器下载文件
"Content-Disposition": "attachment;filename=test.csv" 

到了这里,关于nginx 转发数据流文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端将后端数据流转为图片(微信小程序)

    获取后端流的请求responseType必须使用arraybuffer 将后端数据刘转换为base64再转换为本地图片 html与data

    2024年02月15日
    浏览(36)
  • 【软件设计师】程序猿需掌握的技能——数据流图

    作为一个程序员,不仅要具备高水平的程序编码能力,还要是熟练掌握软件设计的方法和技术,具有一定的软件设计能力,一般包括软件分析设计图(常见的有数据流图,程序流程图,系统流程图,E-R图)和其他对业务表达的说明资料。 数据流图(Data Flow Diagram,简称DFD)

    2024年02月20日
    浏览(42)
  • <JavaEE> 文件IO -- 数据流和文件内容操作(Reader 和 Writer 、InputStream 和 OutputStream)

    目录 一、数据流概述 二、流的关闭 2.1 使用 close() 方法 2.2 使用 try-finally 2.3 使用 try-with-resources 三、字符流的读写 3.1 Reader 类 3.2 Writer 类 四、字节流的读写 4.1 InputStream 类 4.2 OutputStream 类 1)在 Java 中,文件的操作分为两类 操作文件系统 通过 File 类,在系统中进行增、删

    2024年02月04日
    浏览(37)
  • 微信小程序-接入sse数据流并实现打字机效果( ChatGPT )

    从流中获取的数据格式如下 小程序调用SSE接口 我这边接收到的数据类型为Uint8Array,需要处理成text文本(如上图) 使对话有打字机效果 参考自:小程序实现 ChatGPT 聊天打字兼自动滚动效果 完整代码

    2024年04月09日
    浏览(75)
  • 虚幻引擎程序化资源生成框架PCG 之 UPCGBlueprintElement源码笔记(二)数据流

    PCG节点处理的是数据流,也就是点云,点云到底是啥?笼统地说就是一个个携带着信息的点组成的集合。但是在具体是使用过程中,我们还得了解这些”携带着信息的点“是如何被层层包装起来的。本文中老王就和大家一边拆解源代码一边做实验,尝试着深入理解一下PCG中的

    2024年02月13日
    浏览(55)
  • 后端接口返回图片(数据流)前端怎么处理(ArrayBuffer转base64)【包含PC以及小程序】

    MDN-前端必看网站 #最后如果axios的封装时有封装响应拦截器,如下: 要给这个if判断的条件做补充 这里放axios官网的请求配置中 responseType 可选值参考(封装axios必须了解) axios官网地址

    2024年02月14日
    浏览(39)
  • 什么是Vue的数据流(单向数据流)?如何进行数据流管理

    在Vue中,数据流是指数据的传递和管理方式。Vue采用的是单向数据流,也就是说,数据是从父组件流向子组件,子组件不能直接修改父组件的数据。本文将介绍Vue的数据流机制,以及如何进行数据流管理。 Vue的数据流机制可以分为两类:props和events。 Props 在Vue中,父组件可以

    2024年02月08日
    浏览(53)
  • 银行储蓄系统的顶层数据流图及细化数据流图

    绘制出银行储蓄系统的顶层数据流图及细化数据流图; 银行储蓄系统存、取款流程如下: 1)业务员事先录入利率信息; 2)如果是存款,储户填写存款单,业务员将存款单键入系统,系统更新储户存款信息(存款人姓名、存款人账号、电话号码、身份证号码、存款金额、存

    2024年01月17日
    浏览(41)
  • Elasticsearch:将 ILM 管理的数据流迁移到数据流生命周期

    警告 :此功能处于技术预览阶段,可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。目前的最新版本为 8.12。 在本教程中,我们将了解如何将现有数据流(data stream)从索引生命周期管理 (ILM) 迁移到数据

    2024年04月29日
    浏览(37)
  • OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)

    OPC的诞生及历史 :软件进行开发时需要与各种不同的协议进行对接,例如Modbus协议等,当设备很多,协议很多的情况下,上位机与硬件的沟通就会变得很麻烦,所以就有了将这些协议抽象出一个标准接口,对于软件人员就无需和协议对接,只需要对接接口即可,因此OPC就诞生

    2024年02月15日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包