Nginx 應該如何流式響應配置

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

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-tw/n/7146.html

(1)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-04-26 11:17
下一篇 2024-05-05 11:04

相關推薦

  • Java如何從Nginx下載文件

    本文將從以下幾個方面詳細介紹如何使用Java從Nginx下載文件。 一、準備工作 在Java中下載文件需要使用到Apache HttpClient庫,這個庫是一個基於Java的HT…

    編程 2025-04-27
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • NGINX許可權被拒絕問題

    NGINX是一款常見的Web伺服器軟體,但是在使用中常會遇到「permission denied」許可權被拒絕的問題。下文將從多個方面介紹本問題和解決方法。 一、系統許可權問題 1、檢…

    編程 2025-04-25
  • 關閉nginx命令詳解

    一、linux系統中關閉nginx命令 1、使用ps命令找到nginx的進程ID $ ps -ef | grep nginx 2、發送信號給nginx進程結束 $ kill -QU…

    編程 2025-04-25
  • 深入淺出:理解nginx unknown directive

    一、概述 nginx是目前使用非常廣泛的Web伺服器之一,它可以運行在Linux、Windows等不同的操作系統平台上,支持高並發、高擴展性等特性。然而,在使用nginx時,有時候…

    編程 2025-04-24
  • nginx指定配置文件詳解

    一、配置文件介紹 nginx的配置文件主要由指令和塊組成,以「;」分號作為結束符號,以「{}」大括弧作為塊的開始和結束標誌。 nginx的默認配置文件在安裝目錄下的conf文件夾中…

    編程 2025-04-24
  • 重啟nginx服務的命令詳解

    nginx是一個高性能的Web伺服器,可通過重新啟動nginx服務來更新配置文件和釋放資源。本文將從多個方面詳細闡述如何重啟nginx服務,包括命令的使用、參數的說明等。 一、ng…

    編程 2025-04-24
  • Nginx$Host詳解

    一、什麼是Nginx$Host Nginx是一款輕量級的Web伺服器,可以作為反向代理伺服器、負載均衡伺服器等。而Nginx$Host是Nginx中的一個特殊變數,它用於表示當前請…

    編程 2025-04-23
  • Mac Nginx詳細介紹

    一、安裝Nginx 安裝nginx最簡便的方法是使用Homebrew。執行以下命令來安裝Homebrew: /usr/bin/ruby -e “$(curl -fsSL https…

    編程 2025-04-23
  • 如何解決Windows下Nginx啟動一閃而過的問題

    一、Nginx 安裝及配置過程 Nginx是一款輕量級的Web伺服器,可以用於反向代理、負載均衡、緩存等方面的應用,常用於Web應用的高並發場景。在Windows系統上,安裝ngi…

    編程 2025-04-23

發表回復

登錄後才能評論