加载JavaScript文件时nginx报::ERR_CONTENT_LENGTH_MISMATCH错误解决
背景
使用nginx做反向代理,使用8013端口代理4200端口的angular
,问题出现的原因是在开发过程中一次清除浏览器缓存,之后8013端口产生::ERR_CONTENT_LENGTH_MISMATCH错误,但原4200端口正常,图片如下所示
系统:Mac OS 10.13.5
访问8013时
访问4200时
定位问题
因为在8013端口已经映射出加载界面,所以开始找问题的方向一直在angular
,一直没有找到,后来找到喜硕,分析着4200端口访问是成功的所以感觉问题还是处在nginx
上,看报错的意思发现内容太长,于是试着删了几个模块发现居然好了,再到后来在google上查了一下这个问题,发现大概时nginx
的缓存方向的问题。
打开nginx
的日志文件,运行以下指令: tail -f /usr/local/var/log/nginx/error.log,发现时文件权限禁止,
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
就会提供所有的内容,因此将产生缓存。