【問題描述】:客戶端使用curl命令向nginx請求數據,當返回數據量較大時,數據被截斷,客戶端無法獲取完整的數據。
【問題原因】:nginx配置文件中包含了proxy_buffer_size、proxy_buffers兩個配置字段,其中proxy_buffer_size用來接收后端服務器response的第一部分,proxy_buffers用來設置讀取被代理服務器的緩沖區數目和大小,如果proxy_buffers關閉,nginx不會等到所有后端數據都被獲取到之后才返回,而是盡快將接收到的數據傳給客戶端,在數據傳完之前,nginx接收的最大緩存不能超過proxy_buffer_size。如果proxy_buffers打開了,nginx會盡可能的讀取后端數據到buffer中,直至proxy_buffers設置的所有buffer都被寫滿或數據都被讀取完,此時nginx開始向客戶端傳輸數據。(參考說明:https://www.nosa.me/2014/11/01/nginx-proxy-buffer%E7%9B%B8%E5%85%B3%E7%9A%84%E8%AE%BE%E7%BD%AE%E5%92%8C%E8%A7%A3%E9%87%8A/)
【解決方案】:在nginx.conf配置文件中新增proxy_buffers、proxy_buffer_size的設置:proxy_buffer_size 1024k; proxy_buffers 4 1024k;