亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > Nginx > 正文

nginx keepalive的具體使用

2024-08-30 12:29:56
字體:
來源:轉載
供稿:網友

默認http1.1協議的請求頭是默認開啟keepalive,如圖:

nginx,keepalive

那什么是keepalive?作用是什么?

keepalive是在TCP中一個可以檢測死連接的機制,作用是保持socket長連接不被斷開,屬于tcp層的功能,并不屬于應用層。

TCP層怎么做到保持長連接的呢?

先看keepalive的用法:有三個參數,開放給應用層使用

sk->keepalive_probes:探測次數,重試次數sk->keepalive_time 探測的心跳間隔,TCP鏈接在多少秒之后沒有數據報文傳輸啟動探測報文sk->keepalive_intvl 探測間隔,未收到回復時,重試的時間間隔

默認配置查看:

[***@*** ~]$ cat /proc/sys/net/ipv4/tcp_keepalive_time7200[***@*** ~]$ cat /proc/sys/net/ipv4/tcp_keepalive_intvl75[***@*** ~]$ cat /proc/sys/net/ipv4/tcp_keepalive_probes9

使用方法:

int keepalive = 1; // 開啟keepalive屬性int keepidle = 60; // 如該連接在60秒內沒有任何數據往來,則進行探測int keepinterval = 5; // 探測時發包的時間間隔為5 秒int keepcount = 3; // 探測嘗試的次數。如果第1次探測包就收到響應了,則后2次的不再發。并且清零該計數setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive , sizeof(keepalive ));setsockopt(rs, SOL_TCP, TCP_KEEPIDLE, (void*)&keepidle , sizeof(keepidle ));setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)&keepinterval , sizeof(keepinterval ));setsockopt(rs, SOL_TCP, TCP_KEEPCNT, (void *)&keepcount , sizeof(keepcount ));

應用層這么設置后,會把默認配置覆蓋,走手動設置的配置。

對于一個已經建立的tcp連接。如果在keepalive_time時間內雙方沒有任何的數據包傳輸,則開啟keepalive功能的一端將發送 keepalive數據心跳包,若沒有收到應答,則每隔keepalive_intvl時間再發送該數據包,發送keepalive_probes次。一直沒有 收到應答,則發送rst包關閉連接。若收到應答,則將計時器清零。

抓包驗證tcp心跳包內容

nginx,keepalive

根據抓包繼續分析keepalive發送及回復的心跳包內容:

tcp頭部結構體源碼為:

typedef struct _TCP_HEADER{ short m_sSourPort;          // 源端口號16bit short m_sDestPort;           // 目的端口號16bit unsigned int m_uiSequNum;      // req字段 序列號32bit unsigned int m_uiAcknowledgeNum; //ack字段 確認號32bit short m_sHeaderLenAndFlag;     // 前4位:TCP頭長度;中6位:保留;后6位:標志位 short m_sWindowSize;         //win字段 窗口大小16bit short m_sCheckSum;          // 檢驗和16bit short m_surgentPointer;        // 緊急數據偏移量16bit}__attribute__((packed))TCP_HEADER, *PTCP_HEADER;

看發送的心跳包內容:

0000 d4 6d 50 f5 02 7f f4 5c  89 cb 35 29 08 00    //mac頭 14字節:                         45 00 // ip頭 20字節 :0010 00 28 10 f4 00 00 40 06  5b dd ac 19 42 76 0a b30020 14 bd      e4 4a 1f 7c 32 7e  7a cb 4c bc 55 08 50 10  // tcp頭 20字節 0030 10 00 3f 00 00 00//分析tcp頭部內容e4 4a //源端口號16bit 10進制為:58442 1f 7c //目的端口號16bit 10進制為 : 8060 32 7e 7a cb // req字段 序列號32bit 10進制為 : 4c bc 55 08 // ack字段 確認號32bit 5 // 前4位:TCP頭長度 5*4 =20 字節 沒問題 0 10 /// 中6位:保留;后6位:標志位 10 代表倒數第5位為1, 標識改tcp包為 ACK 確認包 0030 10 00 3f 00 00 00 

繼續看回復的心跳包內容 :

0000 f4 5c 89 cb 35 29 d4 6d 50 f5 02 7f 08 00 45 00 0010 00 34 47 28 40 00 36 06 ef 9c 0a b3 14 bd ac 19 0020 42 76 // 前面數據不解讀 1f 7ce4 4a4c bc 55 0832 7e 7a cc8// TCP頭長度為8 * 4 = 32 除了頭部 還有 選項數據 12字節 0 10  // 中6位:保留;后6位:標志位 10 代表倒數第5位為1, 標識該tcp包為 ACK 確認包 0030 01 3f //win字段 窗口大小16bit4e 0d // 檢驗和16bit00 00 // 緊急數據偏移量16bit01 01 08 0a 00 59 be 1c 39 13 0040 cf 12 // 選項數據 12字節 

由上可以看出,tcp維持長連接的心跳包是由瀏覽器向服務器先出發送一個ACK包,然后服務器再回復一個ACK包,且帶了選項數據

nginx會怎么處理keepalive請求,都會做哪些事情?

首先做的是版本判斷 :http協議版本低于1.1時,該鏈接的keepalive置為0if (r->http_version < NGX_HTTP_VERSION_11) {  r->keepalive = 0;} ngx_http_process_connection 函數中 ngx_http_request_t 中帶有keep-alive則把改鏈接標識起來 if (ngx_strcasestrn(h->value.data, "keep-alive", 10 - 1)) {  r->headers_in.connection_type = NGX_HTTP_CONNECTION_KEEP_ALIVE;}ngx_http_handler函數中對r->headers_in.connection_type 判斷,給r->keepalive賦值為1  switch (r->headers_in.connection_type) {  case NGX_HTTP_CONNECTION_KEEP_ALIVE:    r->keepalive = 1;    break;  }ngx_configure_listening_sockets函數中,當keepalive為1時,對該連接開啟KEEPALIVE,之后tcp底層就會對該連接fd做檢測死連接的機制,保持長連接,不斷開。if (ls[i].keepalive) {  value = (ls[i].keepalive == 1) ? 1 : 0;  if (setsockopt(ls[i].fd, SOL_SOCKET, SO_KEEPALIVE,//開啟keepalive功能          (const void *) &value, sizeof(int))    == -1)  }

nginx什么時候長連接會斷開呢?

在nginx通過 setsockopt(ls[i].fd, SOL_SOCKET, SO_KEEPALIVE,(const void *) &value, sizeof(int))開啟keepalive后,會始終和客戶端保持長連接,如此會出現一個很嚴峻的問題,每個woker的能保持的連接數是有限的(ep = epoll_create(cycle->connection_n / 2); cycle->connection_n / 2 為epoll能管理的fd上限),如此一來,連接數很快就被耗盡,這時候nginx應該怎么處理 ?

為了找到這個答案,我們來看nginx關于keeoalive的兩個配置參數

keepalive_timeout

keepalive_timeout timeout [header_timeout];

第一個參數:設置keep-alive客戶端連接在服務器端保持開啟的超時值(默認75s);值為0會禁用keep-alive客戶端連接;

第二個參數:可選、在響應的header域中設置一個值“Keep-Alive: timeout=time”;通??梢圆挥迷O置;

注:keepalive_timeout默認75s

keepalive_requests

keepalive_requests指令用于設置一個keep-alive連接上可以服務的請求的最大數量,當最大請求數量達到時,連接被關閉,值為0會也禁用keep-alive客戶端連接;。默認是100。
答案顯而易見,通過 keepalive_timeout keepalive_requests 來管理長連接,

  • 當一個tcp連接存活時間超過 keepalive_timeout 時則會被close掉,nginx的具體實現,是通過定時器來做的
  • 當一個tcp連接最大情書數超過 keepalive_requests 時則也會被close掉

通過這兩個機制來保證每個worker的連接數不會超過epoll所能管理的數目。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91亚洲精品在线| 国产亚洲一区精品| 中文字幕欧美日韩va免费视频| 91精品中国老女人| 97免费视频在线播放| 97在线免费视频| 国产日韩精品电影| 亚洲精品久久久久久久久久久久| 日本一区二区在线播放| 久久久久久久久久久免费精品| 日韩欧美国产中文字幕| 国产日本欧美在线观看| 8x海外华人永久免费日韩内陆视频| 亚洲视频在线观看免费| 精品久久久91| 日韩在线播放一区| 国产亚洲精品久久久久久牛牛| www日韩中文字幕在线看| 欧美日韩激情视频| 日本精品在线视频| 91免费电影网站| 亚洲精品久久久久久久久| 一级做a爰片久久毛片美女图片| 这里只有精品视频在线| 一区二区三区回区在观看免费视频| 5566日本婷婷色中文字幕97| 国产成人午夜视频网址| 亚洲国产精品成人精品| 久久青草福利网站| 国外色69视频在线观看| 国产欧美亚洲精品| 91av视频在线观看| 懂色aⅴ精品一区二区三区蜜月| 中文字幕亚洲第一| 亚洲欧美日韩直播| 久热国产精品视频| 亚洲网站视频福利| 亚洲欧美在线播放| 欧美最猛性xxxxx亚洲精品| 亚洲国产精品高清久久久| 欧美性极品少妇精品网站| 久久夜色精品国产欧美乱| 4438全国亚洲精品在线观看视频| 欧美大成色www永久网站婷| 欧美影院成年免费版| 日韩在线一区二区三区免费视频| 日本韩国欧美精品大片卡二| 日韩在线视频播放| 91在线中文字幕| 91久久在线视频| 91精品国产自产在线老师啪| 伊人久久久久久久久久久| 亚洲综合日韩中文字幕v在线| 日韩欧美大尺度| 国产黑人绿帽在线第一区| 精品动漫一区二区| 亚洲欧美综合精品久久成人| 国产精品aaa| 国产欧美最新羞羞视频在线观看| 国产成人精品电影久久久| 国产精国产精品| 久久99亚洲精品| 日韩在线精品一区| 一区二区三区无码高清视频| 欧美午夜激情视频| 成人看片人aa| 91精品国产91久久久久福利| 欧洲永久精品大片ww免费漫画| 日韩av在线网站| 精品久久久久国产| 亚洲国产一区二区三区四区| 欧美激情免费视频| 欧美在线精品免播放器视频| 欧美另类第一页| 精品视频久久久久久久| 国模gogo一区二区大胆私拍| 日韩av免费在线播放| 日韩电影免费观看在线观看| 日韩av在线网页| 91精品久久久久久久久久久| 欧美整片在线观看| 欧美电影电视剧在线观看| 久久精视频免费在线久久完整在线看| 日韩美女视频在线观看| 另类专区欧美制服同性| 色噜噜狠狠狠综合曰曰曰| 国产成人一区二区三区电影| 久久久久久久久久av| 国产91色在线| 国产精品成av人在线视午夜片| 日本不卡视频在线播放| 国产精品一区二区在线| 成人在线中文字幕| 精品久久久久久国产| 亚洲欧美日本另类| 欧美激情一区二区三区在线视频观看| 国产精品jizz在线观看麻豆| 久久久亚洲国产| 中文字幕无线精品亚洲乱码一区| 国产精品视频专区| 亚洲xxxx3d| 成人亚洲激情网| 亚洲综合日韩中文字幕v在线| 欧美一区二区影院| 欧美在线观看网站| 一本大道久久加勒比香蕉| 色妞欧美日韩在线| 日韩专区在线观看| 日韩电影免费观看在线观看| 亚洲18私人小影院| 亚洲老板91色精品久久| 91经典在线视频| 国产成人97精品免费看片| 操人视频在线观看欧美| 亚洲欧美国产日韩中文字幕| 国产精品激情av在线播放| 97国产在线视频| 黑人精品xxx一区一二区| 国产精品黄色影片导航在线观看| 欧美大尺度电影在线观看| 日韩精品在线影院| 亚洲视频精品在线| 国产精品444| 爱福利视频一区| 久久久av一区| 欧美成人性生活| 亚洲福利视频专区| 欧美日韩在线视频一区| 欧美激情伊人电影| 国产精品影院在线观看| 久久国产精品亚洲| 国产欧亚日韩视频| 亚洲美女在线视频| yw.139尤物在线精品视频| 一级做a爰片久久毛片美女图片| 欧美日韩激情视频| 亚洲美女动态图120秒| 欧美性高跟鞋xxxxhd| 国产91久久婷婷一区二区| 成人网在线免费看| 国产精品jizz在线观看麻豆| 欧美亚洲在线视频| 狠狠综合久久av一区二区小说| 亚洲综合社区网| 九色精品美女在线| 欧美性猛交xxxx免费看漫画| 日韩精品欧美国产精品忘忧草| 在线观看久久av| 欧美日韩亚洲天堂| 亚洲欧美日韩国产成人| 蜜月aⅴ免费一区二区三区| 国产成人av网址| 亚洲色图欧美制服丝袜另类第一页| 久久综合88中文色鬼| 国产免费一区二区三区在线能观看| 丝袜亚洲另类欧美重口| 欧美美最猛性xxxxxx| 亚洲午夜小视频| 精品中文字幕久久久久久| 亚洲欧美国产高清va在线播| 欧美日韩精品在线观看| 久久久精品视频在线观看| 久久成人av网站| 欧美一区二区.|