通过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

时间: 2024-10-17 21:53:04

通过Nginx访问后端应用,ERR_CONTENT_LENGTH_MISMATCH 问题的解决的相关文章

nginx下后端节点realserverweb健康检测模块ngx_http_upstream_check_module

本文章收录做资料使用,非本人原创,特此说明. 公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出: 1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带) 官网地址:http://nginx.org/cn/docs/http/ngx_http_proxy_module.html#proxy_next_upstream 2.nginx

nginx 访问默认index.html首页跳转指定页面

nginx 访问默认index.html首页跳转指定页面 在server 段加入: rewrite ^/index.html(.*)$ /index.php permanent;

ELK+syslog+nginx访问日志收集+分词处理

一.nginx访问日志配置: 1.日志格式配置: log_format json '{"@timestamp":"$time_iso8601",' '"host":"$server_addr",' '"clientip":"$remote_addr",' '"size":$body_bytes_sent,' '"xff":"$http_x

elkstack实战---集中管理nginx访问日志及报表展示

一.nginx访问日志,格式调整为json # cat /opt/config/tengine/nginx.conf |grep json log_format json '{"@timestamp":"$time_iso8601",' '"host":"$server_addr",' '"method":"$request_method",' '"url":&quo

nginx访问不到

nginx访问不到 今天,一朋友的一台linux服务器上部署了nginx,但是外部(公网)就是不能访问,于是协助其排查.整体思路如下: 1.确认nginx配置是否ok. 2.确认网络是否可达. 3.是否受防火墙安全控制等. 4.排除以上原因之后,远程实际再测试. 那么开始排查: 1.确认nginx配置是否ok. 1.1.检查nginx的配置. 发现有报错 2013/11/13 15:35:09 [emerg] 7739#0: bind() to 0.0.0.0:80 failed (98: Ad

Nginx 访问日志增长暴增出现尖刀的详细分析

前言:          Nginx日志里面Mobileweb_access.log增长特别大,一天上百兆,将近100W的访问记录,按照我们目前的规模,热点用户才500个左右,就算人人用手机app访问,怎么可能会有这么大的url访问量?以前只是安装使用nginx,还没有抽出时间仔细研究,这回需要彻底的去分析nginx日志了. 1,日志分类 主要2种,一种是错误日志,一种是访问日志,这些配置都在/usr/local/nginx/conf/nginx.conf里面,默认都是打开的,自己也可以选择关闭

Nginx虚拟主机配置实践之nginx访问同一个地址方法(二)

Nginx虚拟主机配置实践之nginx访问同一个地址方法(二) 一.虚拟主机别名介绍 虚拟主机别名就是为虚拟主机设置除了主域名以外的另一个或多个域名名字,这样就能实现用户访问的多个域名对应于同一个虚拟主机网站的功能.在生产环境中,以www.afeilinux.com域名的虚拟主机为例,为其增加一个别名afeilinux.com时,在该域名出现的网站内容和访问www.afeilinux.com得到的结果是一样的. 二.实施方法 第一种方法:Nginx虚拟主机的别名配置 更改wtf.conf配置文件

nginx-rrd监控nginx访问数

一 .查看已安装的nginx是否包含stub_status模块 /usr/local/nginx/sbin/nginx -V nginx version: Nginx/1.2.0 configure arguments: --with-http_stub_status_module 确定支持stub_status模块后编辑修改nginx.conf location /nginx_status {      stub_status on; //这个选项参数就是在编译时对stub_status模块的

Nginx访问PHP文件的File not found错误处理,两种情况

Nginx访问PHP文件的File not found错误处理,两种情况 这个错误很常见,原有有下面两种几种 1. php-fpm找不到SCRIPT_FILENAME里执行的php文件 2. php-fpm不能访问所执行的php,也就是权限问题 第一种情况 可以在你的location php 里面添加当文件不存在时返回404而不是交给php-fpm进行处理 location ~ \.php${ ... #文件不存在转404 try_files $uri = 404; ...} 然后,在你的配置文