這陣子透過Nginx來作為proxy來重導連結網址,只是這陣子有人反應抓一些檔案會出現一些問題,有時可以完整抓完檔案,有時只抓一半就中斷了,時好時壞,不知什麼原因。
檔案主要是抓取jquery檔案,大小約略90K,但是抓下來可能只有17K,
之後查了Nginx上的Error.log發現以下錯誤
2017/09/15 14:44:26 [error] 3480#5536: *1350287 upstream prematurely closed connection while reading upstream,
可能早成這問題的原因包羅萬象,光從這訊息來找錯誤可能不是那麼簡單,仔細觀察瀏覽器送請求時,發現透過proxy到server抓取與直接對server抓取似乎有點不一樣,觀察了之後發現瀏覽器抓檔案是以Chunked transfer encoding抓取檔案,目的是在將檔案拆成多個區塊抓取,這個機制是從 HTTP 1.1 才支援,同時與Nginx keepalive機制有關連。
找到這邊我回去調整nginx conf設定,在proxy location內容內加上:
proxy_set_header Connection ""; proxy_http_version 1.1;
加入以上設定,並重啟Nginx 就可以正常將檔案抓下來了。
參考網站:
nginx close upstream connection after request
分塊傳輸編碼
沒有留言:
張貼留言