欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

nginx中keepalive配置詳解

 更新時(shí)間:2023年08月28日 14:28:03   作者:恒者走天下  
keepalive是長(zhǎng)連接的意思,本文主要介紹了nginx中keepalive配置詳解,具有一定的參考價(jià)值,感興趣的可以了解一下

一、keepalive理解

什么是keepalive

keepalive是長(zhǎng)連接的意思??蛻舳税l(fā)起http請(qǐng)求前需要先與服務(wù)端建立TCP連接,每次TCP連接都需要三次握手來(lái)確定,三次交互不僅會(huì)增加消費(fèi)時(shí)間,還會(huì)增加網(wǎng)絡(luò)流量。http請(qǐng)求是請(qǐng)求應(yīng)答式,如果能知道每個(gè)請(qǐng)求頭與響應(yīng)體的長(zhǎng)度,就可以在一個(gè)連接上執(zhí)行多個(gè)請(qǐng)求,這個(gè)就是所謂的長(zhǎng)連接。

(注意:keepalive是tcp層長(zhǎng)連接探活機(jī)制;keep-alive是應(yīng)用層http協(xié)議使用,在其頭部Connection字段中的一個(gè)值,只是代表客戶端與服務(wù)之間需要保持長(zhǎng)連接,可以理解為通過(guò)此字段來(lái)告訴nginx此連接需要維持長(zhǎng)連接,處理完別直接關(guān)閉連接。)

如何確定請(qǐng)求頭和響應(yīng)體的長(zhǎng)度?

1、請(qǐng)求頭長(zhǎng)度: 如果當(dāng)前請(qǐng)求有body,Nginx需要客戶端在請(qǐng)求頭中指定content-length來(lái)表明body的大小,否則返回400。
2、響應(yīng)體長(zhǎng)度: 在http協(xié)議中響應(yīng)body長(zhǎng)度的確定

  • http1.0:①響應(yīng)頭中有content-length,content-length即為body長(zhǎng)度??头艘勒者@個(gè)長(zhǎng)度接收數(shù)據(jù),接收完了就表示請(qǐng)求完成。②響應(yīng)頭中沒(méi)有content-length,客戶端會(huì)一直接收數(shù)據(jù),知道服務(wù)端主動(dòng)斷開(kāi),才表示body接收完了。
  • http1.1:①chunked傳輸,響應(yīng)頭中有Transfer-encoding,body為流式輸出,body被分成多個(gè)塊,每塊的開(kāi)始會(huì)標(biāo)識(shí)出當(dāng)前塊的長(zhǎng)度,此時(shí)body不需要通過(guò)長(zhǎng)度指定。②非chunked傳輸,響應(yīng)頭中有content-length則按照content-length來(lái)接收數(shù)據(jù),沒(méi)有content-length,則客戶端接收數(shù)據(jù),知道服務(wù)器主動(dòng)斷開(kāi)。

是否可使用長(zhǎng)連接的條件是什么?

可知響應(yīng)體長(zhǎng)度的情況下,當(dāng)服務(wù)器輸出完body后可以考慮使用長(zhǎng)連接。長(zhǎng)連接的條件限制如下:

  • 客服端的請(qǐng)求頭中的connection為close,則客戶端要求不使用長(zhǎng)連接。
  • 客戶端的請(qǐng)求頭中的connection為keep-alive,則客戶端要求使用長(zhǎng)連接。
  • 客戶端的請(qǐng)求頭中沒(méi)有connection這個(gè)頭,如果是http1.0協(xié)議默認(rèn)為close,如果是http1.1協(xié)議默認(rèn)為keep-alive。

keepalive時(shí)Nginx的等待時(shí)長(zhǎng)是多少?

長(zhǎng)連接時(shí),Nginx在輸出完響應(yīng)體后,會(huì)設(shè)置當(dāng)前連接的keepalive屬性,然后等待客戶端的下一次請(qǐng)求,同時(shí)也設(shè)置了一個(gè)最大等待時(shí)間,這個(gè)時(shí)間通過(guò)keepalive_timeout來(lái)配置,如果是0,則表示關(guān)掉長(zhǎng)連接,此時(shí)不管客戶端的connection值是什么都會(huì)強(qiáng)制設(shè)為close。

keepalive的優(yōu)勢(shì)是什么?

服務(wù)端確定是keepalive打開(kāi)時(shí),在響應(yīng)的http頭中也會(huì)有connection=Keep-Alive,否則為Close。如果connection值為colse,Nginx在響應(yīng)完數(shù)據(jù)后就會(huì)關(guān)掉連接。所以對(duì)于請(qǐng)求量較大的Nginx來(lái)說(shuō),關(guān)掉keepalive最后會(huì)產(chǎn)生較多的time-wait狀態(tài)的socket。當(dāng)客戶端的一次訪問(wèn)需要多次訪問(wèn)同一個(gè)server時(shí),keepalive會(huì)大量減少time-wait的數(shù)量。

二、nginx的keepalive配置

nginx保持keepalive需做那些事情

  • client到nginx的連接是長(zhǎng)連接
  • nginx到server的連接是長(zhǎng)連接

nginx的文件配置

(1)配置TCP層keepalive探活機(jī)制的三個(gè)參數(shù):

#情況1:
http {
server {
    listen 127.0.0.1:3306 so_keepalive=on;#開(kāi)啟keepalive探活,探測(cè)策略走系統(tǒng)默認(rèn)
    }
}
#情況2:
http {
server {
    listen 127.0.0.1:3306 so_keepalive=7m:75s:9;#把空閑時(shí)長(zhǎng)從系統(tǒng)默認(rèn)的5分鐘改為了7分鐘
    }
}

其中so_keepalive有如下選擇配置:

so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
*   on: 開(kāi)啟,探測(cè)參數(shù)更加系統(tǒng)默認(rèn)值
*   off: 關(guān)閉
*   keepidle: 連接空閑等待時(shí)間 
*   keepintvl: 發(fā)送探測(cè)報(bào)文間隔時(shí)間
*   keepcent: 探測(cè)報(bào)文重試次數(shù)

如果nginx未設(shè)置so_keepalive配置,則走系統(tǒng)默認(rèn)的探活策略

(2)nginx與客戶端(一般為瀏覽器、APP等)保持的長(zhǎng)連接進(jìn)行限制管理:

http {
    keepalive_timeout  120s 120s;
    keepalive_requests 100;
}
keepalive_timeout timeout [header_timeout];

第一個(gè)參數(shù):客戶端連接在服務(wù)器端空閑狀態(tài)下保持的超時(shí)值(默認(rèn)75s);值為0會(huì)禁用keep-alive,也就是說(shuō)默認(rèn)不啟用長(zhǎng)連接;第二個(gè)參數(shù):響應(yīng)的header域中設(shè)置“Keep-Alive: timeout=time”;告知瀏覽器對(duì)長(zhǎng)連接的維持時(shí)間;官網(wǎng)介紹如下

keepalive_requests number;

keepalive_requests:默認(rèn)100,某個(gè)長(zhǎng)連接連續(xù)處理請(qǐng)求次數(shù)限制,超過(guò)次數(shù)則該長(zhǎng)連接被關(guān)閉;如果需要釋放某個(gè)連接占用的內(nèi)存,必須關(guān)閉該鏈接,內(nèi)存不大的情況下,不建議開(kāi)大該配置;在QPS較高的場(chǎng)景,則有必要加大這個(gè)參數(shù);

(3)nginx與上游server保持長(zhǎng)連接

http {
    upstream  BACKEND {
        server 127.0.0.1:8000;
        server 127.0.0.1:8001;
        server 127.0.0.1:8002;
        keepalive 300; //空閑連接數(shù)   
        keepalive_timeout  120s;//與上游空閑時(shí)間
        keepalive_requests 100;//與上游請(qǐng)求處理最大次數(shù)
    }
    server{
        listen 8080;
        location /{
            proxy_pass http://BACKEND;
            proxy_http_version 1.1;
            proxu_set_header Connection "";
        }
    }
}

keepalive:限制nginx某個(gè)worker最多空閑連接數(shù),此處不會(huì)限制worker與上游服務(wù)長(zhǎng)連接的總數(shù);
keepalive_timeout:nginx與上游長(zhǎng)連接最大空閑時(shí)間,默認(rèn)值為60s;
keepalive_requests:nginx與上游長(zhǎng)連接最大交互請(qǐng)求的次數(shù),默認(rèn)值為100;

三、應(yīng)用場(chǎng)景

什么時(shí)候使用?

明顯的預(yù)知用戶會(huì)在當(dāng)前連接上有下一步操作
復(fù)用連接,有效減少握手次數(shù),尤其是https建立一次連接開(kāi)銷會(huì)更大

什么時(shí)候不用?

訪問(wèn)內(nèi)聯(lián)資源一般用緩存,不需要keepalive
長(zhǎng)時(shí)間的tcp連接容易導(dǎo)致系統(tǒng)資源無(wú)效占用

到此這篇關(guān)于nginx中keepalive配置詳解的文章就介紹到這了,更多相關(guān)nginx keepalive配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx配置文件詳解

    Nginx配置文件詳解

    這篇文章主要介紹了Nginx配置文件詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Nginx實(shí)現(xiàn)請(qǐng)求的超時(shí)自動(dòng)重試的方法示例

    Nginx實(shí)現(xiàn)請(qǐng)求的超時(shí)自動(dòng)重試的方法示例

    在當(dāng)今數(shù)字化的快節(jié)奏世界中,我們的網(wǎng)絡(luò)應(yīng)用就像是繁忙的交通樞紐,每天都要處理海量的請(qǐng)求,我們需要一種像“備用路線”一樣的機(jī)制,也就是請(qǐng)求的超時(shí)自動(dòng)重試,本文就給大家介紹了Nginx?中怎樣實(shí)現(xiàn)請(qǐng)求的超時(shí)自動(dòng)重試,需要的朋友可以參考下
    2024-07-07
  • prometheus監(jiān)控nginx并實(shí)現(xiàn)可視化的操作指南

    prometheus監(jiān)控nginx并實(shí)現(xiàn)可視化的操作指南

    Nginx是一款高性能的Web服務(wù)器,被廣泛應(yīng)用于各類的網(wǎng)站和應(yīng)用程序中,為了保證Nginx的正常工作,我們需要對(duì)其進(jìn)行監(jiān)控和管理,所以本文給大家介紹了prometheus監(jiān)控nginx并實(shí)現(xiàn)可視化的操作指南,需要的朋友可以參考下
    2024-05-05
  • Nginx開(kāi)啟stub_status模塊配置方法

    Nginx開(kāi)啟stub_status模塊配置方法

    這篇文章主要介紹了Nginx開(kāi)啟stub_status模塊配置方法,Nginx中的stub_status模塊主要用于查看Nginx的一些狀態(tài)信息,本文講解它的開(kāi)啟配置方法,需要的朋友可以參考下
    2015-02-02
  • Nginx防止直接用IP訪問(wèn)Web服務(wù)器的設(shè)置方法

    Nginx防止直接用IP訪問(wèn)Web服務(wù)器的設(shè)置方法

    看了很多Nginx的配置,好像都忽略了ip直接訪問(wèn)Web的問(wèn)題,這樣理論上不利于SEO優(yōu)化,所以我們希望可以避免直接用IP訪問(wèn)網(wǎng)站,而是域名訪問(wèn),具體怎么做呢,看下面
    2012-09-09
  • 定期刪除OpenResty/Nginx大日志文件的方法

    定期刪除OpenResty/Nginx大日志文件的方法

    這篇文章主要介紹了定期刪除OpenResty/Nginx大日志文件的方法,文中通過(guò)代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-05-05
  • Nginx 中實(shí)現(xiàn)請(qǐng)求的排隊(duì)機(jī)制的過(guò)程詳解

    Nginx 中實(shí)現(xiàn)請(qǐng)求的排隊(duì)機(jī)制的過(guò)程詳解

    Nginx中的請(qǐng)求排隊(duì)機(jī)制就像是交通警察指揮交通一樣,讓網(wǎng)絡(luò)流量有序地流動(dòng),保障服務(wù)器的穩(wěn)定運(yùn)行和用戶的良好體驗(yàn),在深入探討 Nginx 中的請(qǐng)求排隊(duì)機(jī)制之前,咱們先來(lái)弄明白到底什么是請(qǐng)求的排隊(duì)機(jī)制,帶著這個(gè)問(wèn)題一起通過(guò)本文學(xué)習(xí)吧
    2024-07-07
  • nginx快速部署一個(gè)網(wǎng)站服務(wù)(多域名+多端口)

    nginx快速部署一個(gè)網(wǎng)站服務(wù)(多域名+多端口)

    本文主要介紹了nginx快速部署一個(gè)網(wǎng)站服務(wù),并實(shí)現(xiàn)多域名和多端口,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-10-10
  • Nginx緩存&優(yōu)雅清除緩存問(wèn)題

    Nginx緩存&優(yōu)雅清除緩存問(wèn)題

    本文詳細(xì)介紹了Nginx的緩存配置,包括緩存文件的存儲(chǔ)路徑、緩存的有效期、哪些請(qǐng)求走緩存、哪些請(qǐng)求不緩存,以及如何刪除緩存,同時(shí),還提供了一個(gè)綜合案例來(lái)說(shuō)明如何配置和使用Nginx緩存
    2025-03-03
  • Nginx使用if指令實(shí)現(xiàn)多個(gè)proxy_pass方式

    Nginx使用if指令實(shí)現(xiàn)多個(gè)proxy_pass方式

    這篇文章主要介紹了Nginx使用if指令實(shí)現(xiàn)多個(gè)proxy_pass方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評(píng)論