线上问题记录20230610-NGINX代理大文件下载问题

news2024/11/19 5:57:22

线上问题记录20230610-NGINX代理大文件下载问题

问题描述

我们有一个在线项目:是一个对象文件存储服务,是用来给用户提供文件对象存储的。今天用户在使用的时候发现超过1G的文件无法进行下载。幸好今天是星期六,使用的人并不是特别多,我们立马去排查问题。

问题排查

后台代码排查

我们第一时间去排查了后台的服务日志。发现报错如下:

image-20230611103259852

org.apache.catalina.connector.ClientAbortException: java.net.SocketTimeoutException

上面的问题经过分析可能的结果如下:

  1. org.apache.catalina.connector.ClientAbortException 这是Tomcat服务器上的一个异常类,它表示客户端(浏览器)中断了与服务器的连接。
  2. java.net.SocketTimeoutException 这是Java网络编程中的一个异常类,它表示套接字操作超时。在这种情况下,连接建立后一段时间内没有收到数据,导致超时异常。

当这两个异常被组合在一起时,ClientAbortException: java.net.SocketTimeoutException通常表示以下情况之一:

  1. 客户端在等待响应时,超时发生,可能是由于网络延迟或服务器处理请求的时间过长引起的。在这种情况下,客户端(浏览器)取消了与服务器的连接,因为它认为服务器已经不再响应。
  2. 客户端请求的数据量过大,导致服务器在发送响应之前超时。这可能是因为客户端发送了大量数据,而服务器在规定的时间内无法接收和处理完整个请求。

到这里我们仔细排查了我们后台的代码,代码中并没有限制文件的传输大小和超时时间,并且我们在内网的环境下直接对后台服务进行请求,下载超过1个G以上的文件并没有问题。

网关服务排查

排查确定了后台服务没有问题,这里我们怀疑是由于网关的限制造成的,我们使用的网关是NGINX,由它来做代理和负载均衡。

查看NGINX的报错日志如下:

image-20230611114251757

2023/06/10 19:23:37 [error] 138672#0: *1504581 upstream prematurely closed connection while reading upstream

在网上搜索问题,发现了一个问题帖:https://github.com/owncloud/client/issues/5706

在这篇issue中通过设置proxy_request_buffering off;proxy_buffering off;解决这个问题。因此可以确定应该是NGINX的缓存配置有问题。

查看NGINX的官方文档:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffering

从NGINX的缓存配置中发现了一个参数:proxy_max_temp_file_size

image-20230611115532177

从这里看到,默认缓存的临时文件大小为1024M就是1个G大小,这和我上面的问题一致,找到问题就好办了。

问题解决

这里我修改NGINX的代理配置,如下所示:

server {
        listen 8000 ssl; 
        server_name server; 
        proxy_max_temp_file_size 10240M;

     location / {
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-PORT $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:9000;
        }

    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/633670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试真题 JavaScript 实现【最长的连续子序列】【2022Q4 100分】

一、题目描述 有N个正整数组成的一个序列,给定一个整数sum,求长度最长的的连续子序列使他们的和等于sum,返回该子序列的长度,如果没有满足要求的序列返回-1。 二、输入描述 第1行有N个正整数组成的一个序列。 第2行给定一个整…

【LIN通讯出现问题】

LIN信号发出了,但是没有收到响应的原因 如果你发送了LIN(局域网互连)信号,但没有收到响应,可能有以下几个原因: 线路故障:检查信号线路是否连接正确,可能存在接触不良、开路或短路等…

【PCB专题】Allegro 单线、差分线自动绕等长功能介绍

在文章【PCB专题】案例:绕等长怎么直接以颜色区分看出是否绕好 中我们讲到Allegro 16.6版本的Timing Vision功能可以直接在PCB上以颜色的区分就能看出单线和差分是否已经绕成等长了,不再需要到规则管理器中去查看。 那么其实Allegro还有单线自动绕等长的功能——Auto interac…

mac电脑储存内存越来越小如何清理释放空间?

如果你是一位Mac系统的用户,可能会发现你的电脑储存空间越来越小。虽然Mac系统设计得非常优秀,但是系统数据和垃圾文件也会占据大量的储存空间。在这篇文章中,我们将探讨mac系统数据怎么这么大,以及mac清理系统数据怎么清理。 一…

# Telegraph-Image:利用Cloudflare Pages和Telegraph无成本创建自己的图床

Telegraph-Image:利用Cloudflare Pages和Telegraph无成本创建自己的图床 Telegraph-Image是一个具有以下特点的图像托管服务: 特点: 无限图片储存数量:你可以上传不限数量的图片,没有存储限制。免费托管&#xff1a…

chatgpt赋能python:Python中如何删除字符串中的标点符号

Python中如何删除字符串中的标点符号 概述 在Python中,字符串是一种基本数据类型,经常被用来存储和处理文本数据。在处理文本数据时,我们常常需要删除其中的标点符号。本文将介绍如何使用Python中的字符串处理方法来删除字符串中的标点符号…

[安卓广播入门][1]Android Studio接收系统广播

一、新建项目 二、增加权限 <uses-permission android:name"android.permission.ACCESS_NETWORK_STATE" />三、代码 public class MainActivity extends AppCompatActivity {private IntentFilter intentFilter;//过滤隐式意图private NetworkChangeReceiver…

【状态估计】变分贝叶斯近似的递归噪声自适应卡尔曼滤波(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Spring框架】第一个Spring(创建和使用)

目录 Spring创建和使用创建创建一个Maven项目添加Spring框架支持(spring-context、spring-beans)添加启动类 存储Bean对象创建Bean将Bean注册到容器读取并使用Bean对象经典面试题&#xff1a;ApplicationContext和BeanFactory的区别是什么&#xff1f; Spring创建和使用 创建 …

SpringBoot-【回顾】

第一个SpringBoot程序 自动装配原理 Springboot的自动装配实际上就是为了从Spring.factories文件中获取到对应的需要进行自动装配的类&#xff0c;并生成相应的Bean对象&#xff0c;然后将它们交给Spring容器来帮我们进行管理 启动器&#xff1a;以starter为标记 EnableAuto…

C语言:给定两个数,求这两个数的最大公约数(新思路:辗转相除法)

题目&#xff1a; 从键盘输入两个数&#xff0c;求这两个数的最大公约数。 思路一&#xff1a;普通方法 总体思路&#xff1a; &#xff08;一&#xff09;. 生成相关变量&#xff1b; 从键盘输入两个数&#xff1b; 再使用 三目操作符&#xff08;条件操作符&#xff09; 找出…

树——“数据结构与算法”

各位CSDN的uu们好久不见呀&#xff0c;好久没有更新我的数据结构与算法专栏啦&#xff0c;现在&#xff0c;我要开始重拾丢下的知识啦&#xff0c;这次&#xff0c;小雅兰要给uu们介绍一个全新的数据结构&#xff0c;下面&#xff0c;就让我们进入树的世界吧&#xff01;&#…

Flutter 环境配置

Flutter 环境配置 电脑上面安装配置JDK 1.下载安装JDK 下载地址&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) 2.配置JDK 2.1、系统变量 里面新增JAVA_HOME&#xff0c;设置值为java sdk 根目录&#xff1a; 2.2 …

OpenGl之纹理坐标及纹理映射

文章目录 纹理坐标纹理映射代码 纹理坐标 为了实现纹理贴图我们需要做三件事&#xff1a;将一张贴图加载到OpenGL中&#xff0c;提供纹理坐标和顶点&#xff08;将纹理对应匹配到顶点上&#xff09;&#xff0c;并使用纹理坐标从纹理中进行取样操作取得像素颜色。由于三角形会被…

Vue源码解析--更新中

【尚硅谷】Vue源码解析之虚拟DOM和diff算法 【Vue源码】图解 diff算法 与 虚拟DOM-snabbdom-最小量更新原理解析-手写源码-updateChildren] 文章目录 2. snabbdom 简介 及 准备工作2.1 简介2.2 搭建初始环境1. 安装snabbdom2. 安装webpack5并配置3. 复制官方demo Example 3. …

如何把歌曲里的伴奏音乐提取出来,分享几个方法给大家!

对于一首歌&#xff0c;我们都知道&#xff0c;它有两部分组成&#xff1a;背景音乐人声。这两者合在一起&#xff0c;便是我们经常听的歌。部分用户想要直接获取歌曲伴奏&#xff0c;那么可以在UU伴奏网上下载。 操作方法比较简单&#xff0c;直接搜索想要的歌曲名称就可以了…

【分布式系统与一致性协议】

分布式系统与一致性协议 CAP原理APCPCA总结BASE理论 一致性拜占庭将军问题 分布式系统是一个硬件或软件组件分布在不同的网络计算机上&#xff0c;彼此之间仅仅通过消息传递进行通信和协调的系统。 分布式系统的设计目标一般包含如下&#xff1a; 可用性&#xff1a;可用性是分…

C++14中binary literals的使用

一个形如42的值被称作字面值常量(literal),这样的值一望而知。每个字面值常量都对应一种数据类型&#xff0c;字面值常量的形式和值决定了它的数据类型。 我们可以将整型字面值写作十进制(基数为10)、八进制(基数为8)或十六进制(基数为16)数的形式。以0开头的整数代表八进制数&…

Dijkstra算法求最短路

Dijkstra算法是单源最短路算法&#xff0c;是用来求一个点到其他所有点点最短距离&#xff0c;使用小根堆优化后时间复杂度大概为 O m l o g n Omlogn Omlogn 注意&#xff1a;不可以解决存在负权边的问题 【模板】单源最短路径&#xff08;标准版&#xff09; 链接&#xff1…

使用CRM系统通过四点快速收集客户信息

CRM是客户关系管理的缩写&#xff0c;它可以帮助企业管理销售、营销和客户服务&#xff0c;提升管理能力&#xff0c;获得更多收益。 那么&#xff0c;在CRM系统中客户是什么&#xff1f;如何快速收集客户信息呢&#xff1f;下面我们来说一说。 一、CRM中的客户是什么&#xf…