角色
client
proxy nginx
server jersey+netty
問題表現
client 直接請求server 正常,返回准確json數據 jsondat
client->nginx->server 經過nginx,則請求長時間阻塞,直到超時返回異常數據 "2000\r\n{jsondata}\"��"
頭尾都異常
問題原因
正常情況 nginx->server 拿到數據,判斷傳輸中止,則nginx->client把數據返回給客戶端
現狀態
nginx-server 拿到數據,但無法判斷出數據已中止,一直拿着數據,直到超時,加上異常信息,傳給client
判斷中止的條件,不外乎
Content-Length/Chunked
server和nginx配合有瑕疵,顯然是nginx 對chunked處理有誤。
chunked總體是http1.1里的內容,這是nginx的缺陷,而nginx理應沒有這個問題
很大的可能是版本過低
經確認
服務器
nginx version: nginx/1.0.15
確認是nginx版本過低導致
http://nginx.org/en/docs/faq/chunked_encoding_from_backend.html
https://serverfault.com/questions/159313/enabling-nginx-chunked-transfer-encoding/187573#187573
升級至1.12.0
另nginx部分版本默認設置還是1.0,需要單獨設置1.1
問題解決
nginx都支持http2.0了,公司的版本連1.1都支持!