概要
遇到的一个抽象问题,简单记录一下
vue打包出来的项目,放服务器上访问,会有部分js文件报错
net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)
尝试使用网页和postman直接请求js文件,发现能正常打开
排查过程
首先用另外一台电脑连流量试了一下,发现跟客户端没关系,那就只可能是服务器端的问题,去查nginx日志,用文件名作为关键词,发现这个
2024/08/22 16:11:36 [crit] 5881#0: *80999 mkdir() “/usr/local/openresty/nginx/proxy_temp/1/35” failed (13: Permission denied) while reading upstream,…
关键就是错误码13,代表在访问proxy_temp文件夹时权限不足,但是我的静态资源也没放这里面啊,去查一下发现
这个文件夹是nginx的缓存文件夹,在访问比较大的静态资源(js文件,css文件)时nginx就会从这里去拿
那么问题就简单了,改一下这个文件夹的访问权限就OK
问题解决
首先看一下这个文件夹的访问权限
cd /usr/local/openresty/nginx
ll
然后发现这个文件夹的权限居然是nobody,这还访问个啥
设置一下
chown www root proxy_temp
chmod -Rf 777 proxy_temp
然后重启ng
./nginx -s reload
再次打开网页,发现已经正常了
小结
这个问题诡异的地方在于使用网页和postman访问能正常打开,初步怀疑是nginx在遇到一次请求多个静态资源时就会从proxy_temp缓存文件夹去拿文件(因为我index.html引入的静态资源比较多),而在单个请求时就会直接去文件位置去拿