Nginx的流式響應(yīng)配置教程
Nginx的流式響應(yīng)配置
Nginx的流式響應(yīng)(streaming response)是指在Nginx作為反向代理服務(wù)器時(shí),將響應(yīng)內(nèi)容一邊接收,一邊逐步發(fā)送給客戶端的過程。
這種響應(yīng)方式可以提高用戶體驗(yàn)和網(wǎng)絡(luò)傳輸效率,常用于處理較大的響應(yīng)內(nèi)容。
在默認(rèn)情況下,Nginx是通過緩存響應(yīng)內(nèi)容來處理請求的。
也就是說,當(dāng)Nginx接收到完整的響應(yīng)后,才會將其發(fā)送給客戶端。
但是,在某些場景下,這種方式可能會導(dǎo)致延遲較高或者請求失敗的情況發(fā)生。
因此,Nginx提供了流式響應(yīng)的功能,讓反向代理服務(wù)器能夠在接收到響應(yīng)的同時(shí),逐步地將響應(yīng)內(nèi)容發(fā)送給客戶端。
這種方式可以減少等待時(shí)間,同時(shí)降低網(wǎng)絡(luò)傳輸?shù)呢?fù)載壓力。
實(shí)現(xiàn)Nginx的流式響應(yīng)
需要在Nginx配置文件中加入相應(yīng)的指令,例如:
也就是打字機(jī)效果,
# 不緩存,支持流式輸出
proxy_cache off; # 關(guān)閉緩存
proxy_buffering off; # 關(guān)閉代理緩沖
chunked_transfer_encoding on; # 開啟分塊傳輸編碼
tcp_nopush on; # 開啟TCP NOPUSH選項(xiàng),禁止Nagle算法
tcp_nodelay on; # 開啟TCP NODELAY選項(xiàng),禁止延遲ACK算法
keepalive_timeout 300; # 設(shè)定keep-alive超時(shí)時(shí)間為65秒這段nginx配置是為了解決流式響應(yīng)的問題。
通過以下幾個(gè)配置來實(shí)現(xiàn)
proxy_cache off; # 關(guān)閉緩存
- 關(guān)閉緩存,防止代理服務(wù)器緩存流式響應(yīng)內(nèi)容,導(dǎo)致客戶端收不到完整響應(yīng)。
proxy_buffering off; # 關(guān)閉代理緩沖
- 關(guān)閉代理服務(wù)器對響應(yīng)的緩沖,防止其緩沖整個(gè)響應(yīng)后再發(fā)送給客戶端,無法實(shí)現(xiàn)流式傳輸效果。
chunked_transfer_encoding on; # 開啟分塊傳輸編碼
- 開啟分塊傳輸編碼,允許將響應(yīng)分成多個(gè)塊進(jìn)行傳輸,實(shí)現(xiàn)流式傳輸。
tcp_nopush on; # 開啟TCP NOPUSH選項(xiàng),禁止Nagle算法
- 開啟TCP NOPUSH選項(xiàng),禁用Nagle算法,防止小塊數(shù)據(jù)的合并,實(shí)時(shí)發(fā)送給客戶端。
tcp_nodelay on; # 開啟TCP NODELAY選項(xiàng),禁止延遲ACK算法
- 開啟TCP NODELAY選項(xiàng),禁用延遲ACK算法,防止ACK包的延遲,及時(shí)發(fā)送給客戶端。
keepalive_timeout 300; # 設(shè)定keep-alive超時(shí)時(shí)間為65秒
- 增加keepalive超時(shí)時(shí)間,防止在流式響應(yīng)未完成時(shí),代理與源服務(wù)器的連接就被關(guān)閉。
- 所以,通過關(guān)閉緩存和代理緩沖,開啟分塊編碼、禁用Nagle與延遲ACK算法,以及增加keepalive超時(shí)時(shí)間,可以實(shí)現(xiàn)代理服務(wù)器與客戶端間的流式響應(yīng)傳輸。
- 使用這段配置,nginx代理可以透傳源服務(wù)器的流式響應(yīng)給客戶端,不會導(dǎo)致響應(yīng)內(nèi)容被截?cái)嗷蜓舆t,實(shí)現(xiàn)真正的流式體驗(yàn)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nginx配置統(tǒng)計(jì)流量帶寬請求及記錄實(shí)時(shí)請求狀態(tài)的方法
這篇文章主要介紹了Nginx中配置統(tǒng)計(jì)流量帶寬請求及記錄實(shí)時(shí)請求狀態(tài)的方法,分別用到了ngx_req_status和ngx_realtime_request模塊,需要的朋友可以參考下2016-01-01
Forever+nginx部署Node站點(diǎn)的方法示例
這篇文章主要介紹了Forever+nginx部署Node站點(diǎn)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
詳解nginx.conf 中 root 目錄設(shè)置問題
這篇文章主要介紹了詳解nginx.conf 中 root 目錄設(shè)置問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
利用Nginx實(shí)現(xiàn)一個(gè)IP部署多個(gè)網(wǎng)站
文章主要介紹了如何在一個(gè)服務(wù)器/一個(gè)IP地址上部署多個(gè)網(wǎng)站虛擬主機(jī)的方法,主要包括基于域名、端口和IP地址的區(qū)分方式,并詳細(xì)描述了Nginx的虛擬主機(jī)配置結(jié)構(gòu)和匹配優(yōu)先,此外,文章還提供了完整的多站點(diǎn)部署示例、限制方案以及管理命令速查,需要的朋友可以參考下2026-05-05

