nginx是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器,本文主要介紹了Nginx的流式響應配置實現。

Nginx的流式響應配置
使用ChatGPT的能力在聊天時來實現打字機效果,因此需要服務端接口進行流式響應,碰到了幾個問題:
1、服務端明明配置了響應頭的Content-Type為:text/event-stream,但前端仍然不是流式接收內容。
2、雖然前端能以流式接收服務端的響應內容,但內容接收完畢,長連接並未關閉,導致前端還以為服務端有數據,會一直請求服務端,最後導致超時。
最後發現是nginx的問題,由於本地對接的時候並未啟用nginx,所以本地對接沒有任何問題。而線上使用nginx請求轉發,有些配置是有默認參數的,所以會失敗。因此,在這裡分享一下,如果小伙們遇到同樣的問題,可以試一試。
nginx部分配置如下:
server {
server_name xxxx;
listen xxxx;
location /506064.com/web {
add_header backendIP $upstream_addr;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1; # 設置http版本為1.1;默認為:1.0
proxy_set_header Connection ""; # 設置Connection為長連接;默認為:no
proxy_cache off; # 關閉緩存;默認是:on
proxy_buffering off; # 關閉代理緩衝;默認是:on
chunked_transfer_encoding on; # 開啟分塊傳輸編碼
tcp_nopush on; # 開啟TCP NOPUSH選項,禁止Nagle算法
tcp_nodelay on; # 開啟TCP NODELAY選項,禁止延遲ACK算法
keepalive_timeout 60; # 設定keep-alive超時時間為60秒
proxy_pass http://506064.com:443;
proxy_redirect off;
proxy_connect_timeout 15; # 與upstream server的連接超時時間(沒有單位,最大不可以超過75s)
proxy_send_timeout 300; # 發送請求給upstream服務器的超時時間
proxy_read_timeout 300; # nginx會等待多長時間來獲得請求的響應
}
}
最主要的幾個配置:
- proxy_http_version 1.1;
- proxy_set_header Connection 「」;
- proxy_cache off;
- proxy_buffering off;
- chunked_transfer_encoding on;
知識點:
Nginx 是通過緩存響應內容來處理請求的。也就是說,當 Nginx 接收到完整的響應後,才會將其發送給客戶端,因此默認是不支持流式響應,需要手動開啟。
原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/7146.html