Nginx-Keepalive

在我们选在Nginx作为http请求的负载均衡时候,整个请求的流向是:上游服务 --> Nginx -->下游服务。

当请求量级过大的时候,我们一般都会在上游服务请求下游服务的时候在client中打开长连接设置:headers.add(new BasicHeader("Connection", "Keep-Alive"))。在Nginx侧不需要做任何措施。默认情况下,Nginx已经自动开启了对上游连接的keep-alive支持。

此时整个请求的链路的状态:

  • 从上游服务到Nginx的连接是长连接
  • 从Nginx到下游服务的连接是短连接

默认情况下 Nginx 访问后端都是用的短连接(HTTP1.0),一个请求来了,Nginx 新开一个端口和后端建立连接,请求结束连接回收。

如果需要Nginx到下游服务也是长连接的时候需要两步设置:

  1. 在Nginx的Server.conf中配置:

    server {
        …
        location /xxx/ {
            proxy_pass http://http_xxx;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            …
        }
    }
    

此时说明从Nginx upsteam下游请求的时候是默认的长连接。

  1. 在upsteam.conf中设置keepalive connections:

    upstream http_xxx {
        server 127.0.0.1:8080;
        keepalive 256;
    }
    

    这个是激活Nignx到下游服务连接缓存数。
    官方解释:

    Activates the cache for connections to upstream servers.(将Nginx与要有服务的连接缓存下来)
    The connections parameter sets the maximum number of idle keepalive connections to upstream servers that are preserved in the cache of each worker process. When this number is exceeded, the least recently used connections are closed.(该connections参数设置在每个工作进程的缓存中保留与下游服务的最大空闲keepalive连接数。超过此数量时,将关闭最近最少使用的连接。)
    It should be particularly noted that the keepalive directive does not limit the total number of connections to upstream servers that an nginx worker process can open. The connections parameter should be set to a number small enough to let upstream servers process new incoming connections as well.(应特别注意的是,该keepalive指令不限制nginx工作进程可以打开的下游服务的连接总数。该connections参数应设置为足够小的数字,以允许下游服务处理新的传入连接。)
    

    需要注意的是:keepalive 这个参数一定要小心设置,尤其对于QPS比较高的场景,需要先做一下估算,根据QPS和平均响应时间大体能计算出需要的长连接的数量。比如前面10000 QPS和100毫秒响应时间就可以推算出需要的长连接数量大概是1000. 然后将keepalive设置为这个长连接数量的10%到30%。

    还有还有一些长连接设置的参数:keepalive_timeout、keepalive_requests

此刻,完整的长连接服务就完整的建立起来了。
如果想查看请求是长连接、短连接可以通过抓包来查看完整的链路请求。

容易混淆的概念:
TCP的keep alive和HTTP的Keep-alive

  • TCP的keep alive是检查当前TCP连接是否活着;
  • HTTP的Keep-alive是要让一个TCP连接活久点,请求在一个tcp链路上传输,减少握手、分手协议,节省性能。

并且它们是不同层次的概念TCP是传输层协议,而HTTP是应用层协议,HTTP协议是建立在TCP协议基础之上的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容

  • nginx 作为反向代理服务器中的 keepalive 在 nginx 中, 对于 http1.0 和 http1...
    Joah_l阅读 14,382评论 0 1
  • 一、nginx之tcp_nopush、tcp_nodelay、sendfile 1、TCP_NODELAY你怎么可...
    呆叔么么阅读 533评论 0 0
  • http keepalive 介绍 在http早期,每个http请求都要求打开一个tpc socket连接,并且使...
    大富帅阅读 31,091评论 0 12
  • 1.简介:  Nginx:engine X ,2002年,开源,商业版 http协议:web服务器(类似于ht...
    尛尛大尹阅读 1,867评论 0 3
  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 2,003评论 0 9