在服务器部署过项目后,访问项目发现有的图片加载不出来,浏览器控制台报出Failed to load resource: net::ERR_CONTENT_LENGTH_MISMATCH错误。
这个问题是Nginx 反向代理访问不到资源缓存,可能原因:
一、查看nginx的log,发现错误如下:
2015/05/27 02:19:10 [crit] 29263#0: *72 open() "/usr/local/nginx/proxy_temp/3/00/0000000003" failed (13: Permission denied) while reading upstream, client: IP, server: localhost, request: "GET /项目名/frame/js/jquery-1.10.1.min.js HTTP/1.1", upstream: "IP地址:8080/项目名/frame/js/jquery-1.10.1.min.js", host: "IP地址", referrer: "IP地址/项目名/"
原来是 nginx 的工作进程对大文件做了缓存,这个缓存在 %nginx%/proxy_temp 目录下,主进程在读取缓存的时候由于权限问题而无法访问。ps nginx 可以看出主进程用户是 webapp(启动 nginx 的用户),工作者进程是 nobody 用户(nginx 默认的工作者用户就是 nobody,如果你没有配 user 指令的话),proxy_temp 目录所有者就是工作者进程的用户(可以 ll proxy_temp 对此进行验证)。
查看Nginx运行进程,确认运行用户为“tomcat”;
ps –ef|grep nginx
2、检查proxy_temp目录所属用户,nginx 默认的工作者用户就是nobody;
ll proxy_temp
3、停止nginx并将nginx目录权限设置为“tomcat”用户;
./nginx -s stop
chown -R tomcat:tomcat nginx
4、修改%nginx%/conf/nginx.conf配置,在worker_processes 前添加:user tomcat;
5、重启nginx即可。
二、nginx服务器内存耗尽。
查看nginx服务器内存使用情况,
先 ps -ef | grep nginx ,会出现5个关于nginx的进程,如果5个进程的id分别为 100、101、102、103、104
杀掉所有nginx进程 kill -9 101 102 103 104
进入目录 cd /usr/sbin
重启 nginx -c /etc/nginx/nginx.conf
至于 nginx -s reload 不建议使用,本人亲试,有时候无效
网友评论