角色html
clientnginx
proxy nginxjson
server jersey+netty服務器
問題表現netty
client 直接請求server 正常,返回準確json數據 jsondat server
client->nginx->server 通過nginx,則請求長時間阻塞,直到超時返回異常數據 "2000\r\n{jsondata}\"��" htm
頭尾都異常io
問題緣由cli
正常狀況 nginx->server 拿到數據,判斷傳輸停止,則nginx->client把數據返回給客戶端coding
現狀態
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都支持!