加载JavaScript文件时nginx报::ERR_CONTENT_LENGTH_MISMATCH错误解决

背景

使用nginx做反向代理,使用8013端口代理4200端口的angular,问题出现的原因是在开发过程中一次清除浏览器缓存,之后8013端口产生::ERR_CONTENT_LENGTH_MISMATCH错误,但原4200端口正常,图片如下所示

系统:Mac OS 10.13.5

访问8013时

加载JavaScript文件时nginx报::ERR_CONTENT_LENGTH_MISMATCH错误解决

访问4200时

加载JavaScript文件时nginx报::ERR_CONTENT_LENGTH_MISMATCH错误解决

定位问题

因为在8013端口已经映射出加载界面,所以开始找问题的方向一直在angular,一直没有找到,后来找到喜硕,分析着4200端口访问是成功的所以感觉问题还是处在nginx上,看报错的意思发现内容太长,于是试着删了几个模块发现居然好了,再到后来在google上查了一下这个问题,发现大概时nginx的缓存方向的问题。

打开nginx的日志文件,运行以下指令: tail -f /usr/local/var/log/nginx/error.log,发现时文件权限禁止,

加载JavaScript文件时nginx报::ERR_CONTENT_LENGTH_MISMATCH错误解决

failed (13: Permission denied) while reading upstream翻译:失败(13: 权限被拒绝)同时读取文件xyz的上游

解决方法

之后用 如下命令开放权限之后,发现就好了

sudo nginx -s stop
sudo chmod -R 777 /usr/local/var/run/nginx/*
nginx

原因:nginx会缓存大文件到proxy_temp目录中,然而对这个目录没有读写权限,nginx 的工作进程对大文件做了缓存,这个缓存在 %nginx%/proxy_temp 目录下,主进程在读取缓存的时候由于权限问题而无法访问。

大概原因应该是在未清理浏览器缓存的时候,nginx只是提供部分内容,所以未产生大文件缓存,当你清除浏览器缓存的时候,nginx就会提供所有的内容,因此将产生缓存。

相关推荐