亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > nginx keepalive的具體使用

nginx keepalive的具體使用

熱門標簽:新鄉人工智能電話機器人加盟 河南省鄭州市地圖標注 七大洲地圖標注 福州呼叫中心外呼系統哪家好 地圖標注需要提交啥資料入駐 400電話申請找哪家公司 昆明外呼系統 地圖標注w是什么方向 臨汾電銷機器人費用

默認http1.1協議的請求頭是默認開啟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_time
7200
[***@*** ~]$ cat /proc/sys/net/ipv4/tcp_keepalive_intvl
75
[***@*** ~]$ cat /proc/sys/net/ipv4/tcp_keepalive_probes
9

使用方法:

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心跳包內容

根據抓包繼續分析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 b3
0020 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 7c
e4 4a
4c bc 55 08
32 7e 7a cc
8// TCP頭長度為8 * 4 = 32 除了頭部 還有 選項數據 12字節 
0 10  // 中6位:保留;后6位:標志位 10 代表倒數第5位為1, 標識該tcp包為 ACK 確認包 
0030 01 3f //win字段 窗口大小16bit
4e 0d // 檢驗和16bit
00 00 // 緊急數據偏移量16bit
01 01 08 0a 00 59 be 1c 39 13 
0040 cf 12 // 選項數據 12字節 

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

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

首先做的是版本判斷 :http協議版本低于1.1時,該鏈接的keepalive置為0
if (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”;通常可以不用設置;

注: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所能管理的數目。

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

標簽:岳陽 海口 紅河 烏海 臨沂 股票 鎮江 四川

巨人網絡通訊聲明:本文標題《nginx keepalive的具體使用》,本文關鍵詞  nginx,keepalive,的,具體,使用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《nginx keepalive的具體使用》相關的同類信息!
  • 本頁收集關于nginx keepalive的具體使用的相關信息資訊供網民參考!
  • 推薦文章
    精品视频在线看| 亚欧成人毛片一区二区三区四区| 欧美大片aaaa一级毛片| 日日日夜夜操| 亚洲第一页乱| 欧美激情一区二区三区视频 | 日本乱中文字幕系列| 日韩字幕在线| 天天做日日爱| 日韩字幕在线| 台湾美女古装一级毛片| 九九精品久久久久久久久| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日韩中文字幕在线播放| 国产成人精品综合久久久| 黄视频网站在线看| 成人影院久久久久久影院| 国产国语对白一级毛片| 国产伦久视频免费观看 视频| 成人高清视频在线观看| 精品视频在线看| 成人免费观看网欧美片| 日日日夜夜操| 91麻豆精品国产自产在线| 99色视频| 欧美一区二区三区在线观看| 黄色免费三级| 国产国语对白一级毛片| 国产一区二区福利久久| 亚洲爆爽| 欧美激情一区二区三区在线| 一级女性全黄生活片免费| 亚洲精品久久久中文字| 午夜欧美福利| 九九久久99| 日本特黄特色aaa大片免费| 可以免费看毛片的网站| 天天做日日爱夜夜爽| 999久久狠狠免费精品| 日韩专区亚洲综合久久| a级黄色毛片免费播放视频| 国产成人精品影视| 人人干人人插| 欧美激情一区二区三区在线| 精品久久久久久影院免费| 91麻豆国产| 久草免费在线观看| 国产精品自拍一区| 免费国产在线观看| 黄视频网站在线看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 麻豆系列 在线视频| 国产一区二区精品尤物| 日韩avdvd| 四虎久久精品国产| 欧美激情伊人| 成人免费观看网欧美片| 国产亚洲精品成人a在线| 精品国产三级a| 国产麻豆精品免费视频| 国产不卡在线播放| 欧美a级片视频| 日韩中文字幕一区| 亚洲天堂在线播放| 午夜激情视频在线播放| 国产精品1024在线永久免费 | 国产原创视频在线| 美国一区二区三区| 精品视频在线观看免费 | 精品国产三级a| 精品国产香蕉在线播出| 黄视频网站免费看| 午夜欧美成人久久久久久| 亚洲天堂在线播放| 日韩在线观看免费| 国产伦精品一区二区三区无广告| 夜夜操网| 日韩av东京社区男人的天堂| 一本高清在线| 国产一区二区精品久久91| 国产亚洲免费观看| 高清一级淫片a级中文字幕 | 国产不卡精品一区二区三区| 欧美一区二区三区在线观看| 久久国产精品自线拍免费| 国产麻豆精品| 午夜欧美成人久久久久久| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 免费国产在线观看| 日本免费看视频| 日本免费看视频| 成人a级高清视频在线观看| 久久精品免视看国产明星| 成人免费观看男女羞羞视频| 国产欧美精品| 久久福利影视| 精品视频在线观看免费 | 九九热国产视频| 日韩一级精品视频在线观看| 精品久久久久久综合网| 亚洲精品久久久中文字| 精品国产一区二区三区国产馆| 精品久久久久久综合网| 九九国产| 国产网站免费视频| 在线观看导航| 九九精品在线播放| 黄视频网站在线看| 天天做人人爱夜夜爽2020| 亚欧视频在线| 国产网站麻豆精品视频| 欧美激情在线精品video| 日本免费看视频| a级黄色毛片免费播放视频| 日日日夜夜操| 高清一级淫片a级中文字幕 | 午夜激情视频在线播放| 欧美激情一区二区三区视频 | 999久久狠狠免费精品| 日韩中文字幕在线亚洲一区| 成人免费观看网欧美片| 精品在线免费播放| 午夜欧美成人久久久久久| 色综合久久手机在线| 色综合久久天天综线观看| 欧美激情一区二区三区在线| 黄视频网站在线看| 999久久狠狠免费精品| 日韩中文字幕在线播放| 国产一区二区精品尤物| 青青青草视频在线观看| 你懂的日韩| 成人免费观看男女羞羞视频| 韩国三级视频网站| 99久久精品国产高清一区二区| 欧美一区二区三区在线观看| 99色视频| 久久国产一久久高清| 精品国产一区二区三区久| 亚欧视频在线| 美国一区二区三区| 国产一区二区精品久久91| 日韩中文字幕在线亚洲一区| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 亚欧成人毛片一区二区三区四区| 一a一级片| a级黄色毛片免费播放视频| 国产一区二区精品尤物| 韩国三级视频网站| 一级片免费在线观看视频| 美女免费精品视频在线观看| 国产成人精品在线| 国产伦理精品| 精品国产一区二区三区免费| a级毛片免费观看网站| 国产亚洲精品成人a在线| 久久国产精品只做精品| 国产伦精品一区二区三区无广告| 国产伦精品一区二区三区在线观看 | 精品美女| 欧美激情一区二区三区中文字幕| 成人免费一级毛片在线播放视频| 日韩在线观看网站| 久久99中文字幕久久| 精品在线免费播放| 久久国产影院| 中文字幕一区二区三区精彩视频| 欧美日本免费| 精品视频免费看| 国产一区二区精品| 成人免费网站久久久| 国产美女在线一区二区三区| 韩国毛片免费| 久久久久久久久综合影视网| 亚洲第一页乱| 青青久久精品| 成人免费一级毛片在线播放视频| 国产极品白嫩美女在线观看看| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 一级毛片视频播放| 在线观看导航| 日韩一级黄色| 日本免费区| 黄色免费三级| 九九久久国产精品大片| 91麻豆tv| 国产伦理精品| 国产网站在线| 精品国产一区二区三区免费| 亚欧视频在线| 精品国产三级a| 天天做日日爱夜夜爽| 九九精品在线播放| 精品国产一区二区三区免费| 亚洲第一页乱| 91麻豆tv| 青青久久精品| 久久精品免视看国产明星| 在线观看导航| 久草免费资源|