nginx权限问题导致反代时报net::ERR_INCOMPLETE_CHUNKED_ENCODING

2017-8-17 12:38:32

transmission可以启动一个http服务器,默认监听9091端口,就可以利用服务器的带宽下片,而且有公网优势,不存在内网还需要UPnP才能正常使用bt的p2p,于是在服务器上的nginx给个域名起个反代,最初用的还正常,但是最近突然发现页面加载不出来了……查看F12,只有jquery-ui.min.js会报net::ERR_INCOMPLETE_CHUNKED_ENCODING,而其他文件都正常加载。

ERR_INCOMPLETE_CHUNKED_ENCODING的错误发生在用Transfer-Encoding:chunked方式发送内容时,发送了一半还没等到结束符就关闭了连接,Google结果大部分是说后端原因……而我这是个静态文件。

没办法,去看看nginx日志吧

在error.log里马上就找到了线索

2017/08/17 11:13:36 [crit] 30002#0: *3395339 open() "/usr/local/nginx/proxy_temp/0/12/0000000120" failed (13: Permission denied) while reading upstream, client: 223.93.163.113, server: example.com, request: "GET /transmission/web/javascript/jquery/jquery-ui.min.js HTTP/1.1", upstream: "http://127.0.0.1:9091/transmission/web/javascript/jquery/jquery-ui.min.js", host: "example.com", referrer: "http://example.com/transmission/web/"

鹅妈妈买买买木木木木木……proxy_temp目录怎么突然没权限了,我的nginx是跑在www用户下的,去看了一眼proxy_temp的权限,700,www:root,按理说应该没啥问题,再往里看,所有子目录都是700,nobody:nobody,问题就出来了……应该是很久很久以前nginx刚配好的时候我是用nobody跑的,但是后来因为想要动静分离让nginx直接返回php的静态文件,就把用户改到www上了,而已经生成的proxy_temp目录权限不会跟随修改,php的返回内容大小一直很小,不至于触发nginx的proxy_temp,而这次将近250k的jquery-ui.min.js需要proxy_temp进行暂存就遇到了目录无法写入的问题,删掉所有文件后重启nginx进程就正常了……

再看新生成的proxy_temp目录里的文件,权限成为了700,www:www,再访问就没有问题了