出现的问题
通过nginx代理服务器对后端tomcat服务器进行访问,可以看到nginx服务的accees.log有访问记录, tomcat的catalina.out有访问记录。然而前端拿不到某些静态文件,导致整个页面没有办法被显示。
定位问题
- 通过tomcat服务器IP和相应端口 [tomcat VM ip]:[tomcat port]是可以访问的后端并且渲染前端的
- 通过另外一条路: waf -> lb -> tomcat server 也是可以正常访问的
- nginx error.log中有
open() "/nginx_dir/proxy_temp/xxx/xxxx/xxxxxxxxxxx" failed (13: Permission denied) while reading
由此我们可以定位错误可能是源于nginx的缓存文件夹无法被nginx访问
解决问题
首先查看 ps aux | grep "nginx: worker process"
当前nginx的用户是谁
然后查看 ll /nginx_dir/proxy_temp
文件夹下文件&&文件夹的用户,大概率会发现里面文件&文件夹权限为root等启动nginx的用户无权限的文件&文件夹
最后更改文件或文件夹所属用户&组 chown -R
测试
在浏览器端重新访问发现访问正常。
思考
有两个点:
- nginx的缓存文件无权限访问后,nginx没有绕过缓存文件并向代理后端发送请求。导致卡死。
- 如果禁止掉nginx的缓存应该也是可以的
参考
https://serverfault.com/questions/235154/permission-denied-while-reading-upstream