通过Nginx访问后端应用,ERR_CONTENT_LENGTH_MISMATCH 问题的解决

部署运行你感兴趣的模型镜像
遇到两个问题
1. 选择日期功能,不起作用了
2. 下载稍大一点的文件,只能下载一小半
页面调试发现有ERR_CONTENT_LENGTH_MISMATCH错误
系统:CentOS,Nginx,proxy到后端的tomcat
原因:nginx会缓存大文件到proxy_temp目录中,然而对这个目录没有读写权限
解决过程:
页面调试,抛出错误:net::ERR_CONTENT_LENGTH_MISMATCH
在chrome下,请缓存或强制刷新,response的status code为200
不强制刷新,response的status code为206
response header里面,content-length 的长度和目标文件的实际长度是一致的
都会出上面这个content length mismatch错误
如果不通过nginx,直接访问tomcat,没有这个错误,系统功能正常。
各种搜,先查到了一个帖子,问题描述很相似,提到是nginx gzip压缩,由于nginx对文件做了压缩准备,按照压缩后的长度来处理数据流,但通过proxy传过来的数据实际没有被压缩,没有传完,ngnix就关闭连接了。
从log来看,tomcat这边确实出现了很多org.apache.catalina.connector.ClientAbortException,与前面出现ERRO_CONTENT_LENGTH_MISMATCH的请求相匹配。
开始学习nginx gzip的配置(准备另做一篇笔记)
问题没有解决,先睡觉,醒了继续搞
醒了,还是没头绪,老老实实去查log
/var/log/nginx/error.log
啊哈,问题在这里:
2015/05/30 00:11:53 [crit] 8808#0: *60 open() "/var/cache/nginx/proxy_temp/2/01/0000000012" failed (13: Permission denied) while reading upstream, client:...

proxy_temp目录,owner是root,rwx权限,其他用户没有权限。
nginx是以nginx用户身份运行的,没有权限,boom!
解决方法:
1. 用root身份运行nginx
2. 将proxy_temp目录的owner设置为nginx
3. 将proxy_temp目录的group设置为nginx,并赋予rwx权限
4. 禁用cache
不想用root去运行nginx,选择了方法3,让系统先work
遗留的问题:
1. proxy_temp目录的owner一开始为什么是root?应该是root吗?
2. 选择方法3后,发现对于同一个文件,会生成多份cache,这不合理,为什么会这样?
3. 对于我们这个情况,需要cache吗?会不会禁用cache才是更合理的选择
>> to be continued
黄鹤
2015-05-30

您可能感兴趣的与本文相关的镜像

ComfyUI

ComfyUI

AI应用
ComfyUI

ComfyUI是一款易于上手的工作流设计工具,具有以下特点:基于工作流节点设计,可视化工作流搭建,快速切换工作流,对显存占用小,速度快,支持多种插件,如ADetailer、Controlnet和AnimateDIFF等

### 关于 `net::ERR_CONTENT_LENGTH_MISMATCH` 的原因分析 `net::ERR_CONTENT_LENGTH_MISMATCH` 是一种常见的浏览器错误,通常表示客户端接收到的数据长度与服务器声明的内容长度不匹配。这种问题可能由多种因素引起,包括但不限于以下几点: 1. **Nginx 配置中的缓冲区设置不当** Nginx 默认会缓存来自上游服务器的响应数据。如果缓冲区大小不足以容纳完整的响应体,则可能导致部分数据丢失或截断,从而引发此错误[^2]。 2. **磁盘空间不足** 当系统的存储设备接近满载时,Nginx 无法正常写入临时文件(如 `/var/lib/nginx/tmp/proxy/` 下的日志或其他中间文件),这可能会中断请求处理过程并触发该错误[^3]。 3. **权限问题** 若 Nginx 进程运行所需的某些目录或文件缺乏适当的操作权限,也可能导致类似的异常行为。例如,“Permission denied” 类型的信息表明存在访问受限的情况[^1]。 4. **网络传输过程中发生意外终止** 不稳定的连接或者防火墙规则阻止了完整的 HTTP 响应被送达至客户端侧,同样会造成此类状况的发生。 --- ### 解决方案详解 针对以上提到的各种潜在诱因,以下是具体的应对策略: #### 方法一:调整 Nginx 缓冲参数 可以通过编辑 Nginx 主配置文件来优化其内部工作方式以减少这类冲突的可能性: ```nginx http { ... proxy_buffer_size 128k; # 设置初始代理缓冲区大小 proxy_buffers 4 256k; # 定义额外分配给每个连接的最大缓冲数量及其单个尺寸 proxy_busy_buffers_size 256k; # 控制忙碌状态下的最大允许使用的buffer总量 } ``` 上述更改旨在增大可用内存池容量以便更好地适应大流量场景需求[^2]。 #### 方法二:清理系统资源占用情况 当发现硬盘剩余空间过少甚至耗尽时,应当立即采取行动释放足够的自由区域供程序正常使用。具体操作流程如下所示: ```bash # 检查当前分区使用率 df -h # 找出消耗最多的子路径 cd / du -sh * # 转移到对应位置进一步定位主要贡献者 cd <target_directory> du -sh * ``` 一旦确认目标对象为冗余记录文档之类的东西就可以考虑将其移除掉;不过在此之前最好先备份以防万一有用处的部分也被误删掉了哦!另外记得清除完毕之后重新加载服务实例使得改动生效才行哟~[^3] #### 方法三:修正文件夹所有权以及属性设定 假如遇到因为身份验证失败而导致的功能失效现象的话,那么就需要按照下面的方式来进行修复啦: ```bash # 更改指定范围内的所有项目归属关系 chown -R nginx:nginx /path/to/directory/ # 或者单独赋予特定权限等级 chmod 755 /another/path/ ``` 这里假设我们的 web server 实际是以名为 'nginx' 用户身份启动起来运转着滴哈~当然实际情况当中也许会有差异所以得根据自己环境具体情况灵活运用咯~最后别忘了再次唤起守护进程完成最终更新步骤呢😉[^1][^3]. #### 方法四:增强网络安全防护机制 对于那些由于外部干扰所造成的通讯障碍而言,则建议加强边界防御体系构建力度的同时也要确保合法通信链路畅通无阻才行呀😎比如说合理规划 ACL 列表条目内容啊之类的东东😄 --- ### 总结说明 综上所述,面对 `net::ERR_CONTENT_LENGTH_MISMATCH` 此类难题的时候可以从多个角度出发寻找突破口直至彻底解决问题为止💪希望上面分享的知识点能够对你有所帮助😊
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值