nginx反向代理tomcat訪問時瀏覽器載入失敗,出現 ERR_CONTENT_LENGTH_MISMATCH 問題

散盡浮華發表於2016-11-22

 

問題說明:
測試機上部署了一套業務環境,nginx反向代理tomcat,在訪問時長時間處於載入中,十分緩慢!

通過瀏覽器除錯(F12鍵->Console),發現有錯誤ERR_CONTENT_LENGTH_MISMATCH 出現:

檢視nginx日誌(當出現故障時,要記得第一時間檢視相關日誌)
.......open() "/Data/app/nginx/proxy_temp/3/00/0000000003" failed (13: Permission denied) while reading upstream, client:...... server: localhost, request: "GET

原因:
nginx在做代理時,其工作程式對大檔案做了快取,這個快取在 %nginx%/proxy_temp 目錄下,主程式在讀取快取的時候由於許可權問題而無法訪問。

[root@dev-new-test proxy_temp]# pwd
/Data/app/nginx/proxy_temp
[root@dev-new-test proxy_temp]# ll
總用量 40
drwx------ 33 www www 4096 11月 22 17:07 0
drwx------ 34 www www 4096 11月 22 17:07 1
drwx------ 34 www www 4096 11月 22 17:07 2
drwx------ 35 www www 4096 11月 22 17:07 3
drwx------ 35 www www 4096 11月 22 17:16 4
drwx------ 35 www www 4096 11月 22 17:16 5
drwx------ 34 www www 4096 11月 22 16:46 6
drwx------ 33 www www 4096 11月 22 16:46 7
drwx------ 33 www www 4096 11月 22 16:47 8
drwx------ 33 www www 4096 11月 22 17:07 9

發現nginx的快取目錄都是www許可權,而nginx程式的啟動使用者是nobody,因為需要將快取的目錄許可權修改成nobody!
[root@dev-new-test proxy_temp]# ps -ef|grep nginx
nobody 28072 46482 0 18:09 ? 00:00:00 nginx: worker process
......

[root@dev-new-test proxy_temp]# pwd
/Data/app/nginx/proxy_temp
[root@dev-new-test proxy_temp]# chown -R nobody.nobody ./*
[root@dev-new-test proxy_temp]# ll
總用量 40
drwx------ 33 nobody nobody 4096 11月 22 17:07 0
drwx------ 34 nobody nobody 4096 11月 22 17:07 1
drwx------ 34 nobody nobody 4096 11月 22 17:07 2
drwx------ 35 nobody nobody 4096 11月 22 17:07 3
drwx------ 35 nobody nobody 4096 11月 22 17:16 4
drwx------ 35 nobody nobody 4096 11月 22 17:16 5
drwx------ 34 nobody nobody 4096 11月 22 16:46 6
drwx------ 33 nobody nobody 4096 11月 22 16:46 7
drwx------ 33 nobody nobody 4096 11月 22 16:47 8
drwx------ 33 nobody nobody 4096 11月 22 17:07 9

這樣,就解決了上面出現的錯誤問題:

另外:
nginx代理tomcat,訪問緩慢問題,還有一種可能原因就是tomcat預設的根目錄是webapps/ROOT,如果不是ROOT,可能也會導致訪問問題。
因為,在部署環境時,首先將webapps下的檔案全部刪除,然後將war包上傳到webapps下改名為ROOT.war,最好說服開發同事在打包時就
打包成ROOT.war名稱,不然後續上傳後就手動修改,這樣tomcat重啟後,就會自動解壓ROOT.war包,自然根目錄就會是webapps/ROOT

還有在部署多個tomcat例項時,儘量不要拷貝已用的tomcat並修改埠後投入使用,最好是拷貝原始碼解壓後的純淨的tomcat,然後修改埠投入使用。

當然,訪問頁面沒有反應時,也可能是因為伺服器磁碟爆滿導致!多方面考慮吧~

相關文章