Nginx 做代理服務器時瀏覽器加載大文件失敗 ERR_CONTENT_LENGTH_MISMATCH 的解決方案

轉自:http://blog.csdn.net/defonds/article/details/46042809

Nginx 做反向代理,後端是 tomcat,chrome 瀏覽器訪問項目時加載大文件失敗 ERR_CONTENT_LENGTH_MISMATCH:
ERR_CONTENT_LENGTH_MISMATCH

查看 linux 日誌:
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: 192.168.1.30, server: localhost, request: "GET /項目名/frame/js/jquery-1.10.1.min.js HTTP/1.1", upstream: "http://192.168.1.177:8080/項目名/frame/js/jquery-1.10.1.min.js", host: "192.168.1.177", referrer: "https://192.168.1.177/項目名/"
2015/05/27 02:19:10 [crit] 29263#0: *77 open() "/usr/local/nginx/proxy_temp/4/00/0000000004" failed (13: Permission denied) while reading upstream, client: 192.168.1.30, server: localhost, request: "GET /項目名/frame/p_w_picpath/DAimG_2013040242192849XA16.jpg HTTP/1.1", upstream: "http://192.168.1.177:8080/項目名/frame/p_w_picpath/DAimG_2013040242192849XA16.jpg", host: "192.168.1.177", referrer: "https://192.168.1.177/項目名/"
原來是 nginx 的工作進程對大文件做了緩存,這個緩存在 %nginx%/proxy_temp 目錄下,主進程在讀取緩存的時候由於權限問題而無法訪問。ps nginx 可以看出主進程用戶是 webapp(啓動 nginx 的用戶),工作者進程是 nobody 用戶(nginx 默認的工作者用戶就是 nobody,如果你沒有配 user 指令的話),proxy_temp 目錄所有者就是工作者進程的用戶(可以 ll proxy_temp 對此進行驗證)。
停止 nginx(nginx -s stop),chown -R 對 nginx 所有目錄權限重新設定成 webapp,然後在 nginx.conf 的 worker_processes 指令前添加指令
user webapp;

最後 webapp 用戶重啓 nginx 即可。


實際操作:

cd     /var/cache/nginx/proxy_temp  (nginx緩存目錄)

chmod -R 777 *(修改權限)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章