共计 733 个字符,预计需要花费 2 分钟才能阅读完成。
背景
使用 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 就会提供所有的内容,因此将产生缓存。