問題說明:
測試機上部署了一套業務環境,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,然后修改端口投入使用。
當然,訪問頁面沒有反應時,也可能是因為服務器磁盤爆滿導致!多方面考慮吧~