遇到兩個問題
1. 選擇日期功能,不起作用了
2. 下載稍大一點的文件,只能下載一小半
頁面調試發現有ERR_CONTENT_LENGTH_MISMATCH錯誤
系統:CentOS,Nginx,proxy到後端的tomcat
原因:nginx會緩存大文件到proxy_temp目錄中,然而對這個目錄沒有讀寫權限
解決過程:
頁面調試,拋出錯誤:net::ERR_CONTENT_LENGTH_MISMATCH
在chrome下,請緩存或強制刷新,response的status code爲200
不強制刷新,response的status code爲206
response header裏面,content-length 的長度和目標文件的實際長度是一致的
都會出上面這個content length mismatch錯誤
如果不通過nginx,直接訪問tomcat,沒有這個錯誤,系統功能正常。
各種搜,先查到了一個帖子,問題描述很相似,提到是nginx gzip壓縮,由於nginx對文件做了壓縮準備,按照壓縮後的長度來處理數據流,但通過proxy傳過來的數據實際沒有被壓縮,沒有傳完,ngnix就關閉連接了。
從log來看,tomcat這邊確實出現了很多org.apache.catalina.connector.ClientAbortException,與前面出現ERRO_CONTENT_LENGTH_MISMATCH的請求相匹配。
開始學習nginx gzip的配置(準備另做一篇筆記)
問題沒有解決,先睡覺,醒了繼續搞
醒了,還是沒頭緒,老老實實去查log
/var/log/nginx/error.log
啊哈,問題在這裏:
-
2015/05/30 00:11:53 [crit] 8808#0: *60 open() "/var/cache/nginx/proxy_temp/2/01/0000000012" failed (13: Permission denied) while reading upstream, client:...
proxy_temp目錄,owner是root,rwx權限,其他用戶沒有權限。
nginx是以nginx用戶身份運行的,沒有權限,boom!
解決方法:
1. 用root身份運行nginx
2. 將proxy_temp目錄的owner設置爲nginx
3. 將proxy_temp目錄的group設置爲nginx,並賦予rwx權限
4. 禁用cache
不想用root去運行nginx,選擇了方法3,讓系統先work
遺留的問題:
1. proxy_temp目錄的owner一開始爲什麼是root?應該是root嗎?
2. 選擇方法3後,發現對於同一個文件,會生成多份cache,這不合理,爲什麼會這樣?
3. 對於我們這個情況,需要cache嗎?會不會禁用cache纔是更合理的選擇
>> to be continued
黃鶴
2015-05-30