通过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
阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
ERR_SSL_VERSION_OR_CIPHER_MISMATCH 错误通常是由于 SSL/TLS 协议版本不兼容或密码套件不匹配导致的。在 Nginx解决此错误,您可以尝试以下步骤: 1. 确认您的 SSL/TLS 配置 请确保您的 SSL/TLS 配置(通常在 Nginx 配置文件中)正确配置并支持您要使用的协议版本和密码套件。例如,在配置文件中可以设置以下内容: ``` ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256; ``` 这将启用 TLS 1.2 和 1.3 协议,并使用 ECDHE-RSA-AES256-GCM-SHA384 和 ECDHE-RSA-AES128-GCM-SHA256 密码套件。 2. 检查客户端支持的协议版本和密码套件 使用 SSL 检查工具(如 OpenSSL)检查客户端支持的协议版本和密码套件。例如,可以使用以下命令检查 OpenSSL 支持的协议版本和密码套件: ``` openssl ciphers -V 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256' openssl s_client -connect example.com:443 -tls1_2 -cipher ECDHE-RSA-AES256-GCM-SHA384 ``` 如果客户端不支持服务器配置中启用的协议版本或密码套件,则可能会导致 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 错误。 3. 更新 SSL/TLS 库和客户端浏览器 如果您的 Nginx 服务器使用的是较旧的 SSL/TLS 库,则可能需要更新以支持更新的协议版本和密码套件。另外,用户的浏览器也需要支持这些协议和密码套件。因此,您可能需要更新您的浏览器以支持最新的 SSL/TLS 版本。 希望这些步骤可以帮助您解决 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄鹤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值