1. 程式人生 > >upstream sent invalid chunked response while reading upstream解決

upstream sent invalid chunked response while reading upstream解決

問題背景:

    一開始是一個下載檔案的需求,但是不能直接下載,需要通過nginx做代理轉發後,才能將檔案流輸出給合作方.然後我們將url的請求通過nginx代理到真實去下載檔案流的伺服器發現並不能下載到檔案.(是通過請求瀏覽器去下載的,瀏覽器會顯示此網頁無法正常運作)
這裡寫圖片描述

問題分析:

    1.一開始以為是程式碼問題,檢查了程式碼,發現直接呼叫介面是可以下載成功的,那麼問題就出在轉發上面了.

    2.然後檢視nginx的error日誌,發現報的錯誤是upstream sent invalid chunked response while reading upstream.之後就是google搜尋問題,發現在nginx的location模組裡面加上proxy_http_version 1.1就可以了.

這裡寫圖片描述

    3.也可以檢視nginx官網對於proxy_http_version的描述,
這裡寫圖片描述如果不填寫http的版本的話,預設是http1.0.從nginx的error日誌上看出原始請求是使用的http1.1的版本,而且下載檔案是使用的分塊傳遞,http1.0是不支援這個特性的.可以簡單的瞭解一下分塊傳遞.
這裡寫圖片描述
http1.0是建立連線,傳送請求資訊,接收請求資訊,斷掉連線.不支援分塊傳遞,所以nginx報錯了.

問題總結:

    這個問題與其說是nginx報錯,不如說是不瞭解http不同版本之間特性的差異.而且要記住一點的是nginx代理後的預設http版本是1.0.如果原始請求是長連線或者分塊傳遞,記得加上http1.1的引數.