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

nginx中keepalive配置詳解

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

一、keepalive理解

什么是keepalive

keepalive是長連接的意思。客戶端發(fā)起http請求前需要先與服務端建立TCP連接,每次TCP連接都需要三次握手來確定,三次交互不僅會增加消費時間,還會增加網絡流量。http請求是請求應答式,如果能知道每個請求頭與響應體的長度,就可以在一個連接上執(zhí)行多個請求,這個就是所謂的長連接。

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

如何確定請求頭和響應體的長度?

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

  • http1.0:①響應頭中有content-length,content-length即為body長度。客服端依照這個長度接收數據,接收完了就表示請求完成。②響應頭中沒有content-length,客戶端會一直接收數據,知道服務端主動斷開,才表示body接收完了。
  • http1.1:①chunked傳輸,響應頭中有Transfer-encoding,body為流式輸出,body被分成多個塊,每塊的開始會標識出當前塊的長度,此時body不需要通過長度指定。②非chunked傳輸,響應頭中有content-length則按照content-length來接收數據,沒有content-length,則客戶端接收數據,知道服務器主動斷開。

是否可使用長連接的條件是什么?

可知響應體長度的情況下,當服務器輸出完body后可以考慮使用長連接。長連接的條件限制如下:

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

keepalive時Nginx的等待時長是多少?

長連接時,Nginx在輸出完響應體后,會設置當前連接的keepalive屬性,然后等待客戶端的下一次請求,同時也設置了一個最大等待時間,這個時間通過keepalive_timeout來配置,如果是0,則表示關掉長連接,此時不管客戶端的connection值是什么都會強制設為close。

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

服務端確定是keepalive打開時,在響應的http頭中也會有connection=Keep-Alive,否則為Close。如果connection值為colse,Nginx在響應完數據后就會關掉連接。所以對于請求量較大的Nginx來說,關掉keepalive最后會產生較多的time-wait狀態(tài)的socket。當客戶端的一次訪問需要多次訪問同一個server時,keepalive會大量減少time-wait的數量。

二、nginx的keepalive配置

nginx保持keepalive需做那些事情

  • client到nginx的連接是長連接
  • nginx到server的連接是長連接

nginx的文件配置

(1)配置TCP層keepalive探活機制的三個參數:

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

其中so_keepalive有如下選擇配置:

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

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

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

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

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

keepalive_requests number;

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

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

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

keepalive:限制nginx某個worker最多空閑連接數,此處不會限制worker與上游服務長連接的總數;
keepalive_timeout:nginx與上游長連接最大空閑時間,默認值為60s;
keepalive_requests:nginx與上游長連接最大交互請求的次數,默認值為100;

三、應用場景

什么時候使用?

明顯的預知用戶會在當前連接上有下一步操作
復用連接,有效減少握手次數,尤其是https建立一次連接開銷會更大

什么時候不用?

訪問內聯資源一般用緩存,不需要keepalive
長時間的tcp連接容易導致系統(tǒng)資源無效占用

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

相關文章

  • Nginx配置文件詳解

    Nginx配置文件詳解

    這篇文章主要介紹了Nginx配置文件詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Nginx實現請求的超時自動重試的方法示例

    Nginx實現請求的超時自動重試的方法示例

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

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

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

    Nginx開啟stub_status模塊配置方法

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

    Nginx防止直接用IP訪問Web服務器的設置方法

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

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

    這篇文章主要介紹了定期刪除OpenResty/Nginx大日志文件的方法,文中通過代碼示例給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-05-05
  • Nginx 中實現請求的排隊機制的過程詳解

    Nginx 中實現請求的排隊機制的過程詳解

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

    nginx快速部署一個網站服務(多域名+多端口)

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

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

    本文詳細介紹了Nginx的緩存配置,包括緩存文件的存儲路徑、緩存的有效期、哪些請求走緩存、哪些請求不緩存,以及如何刪除緩存,同時,還提供了一個綜合案例來說明如何配置和使用Nginx緩存
    2025-03-03
  • Nginx使用if指令實現多個proxy_pass方式

    Nginx使用if指令實現多個proxy_pass方式

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

最新評論