1.软文推荐

2.软文推荐

3.软文推荐

Nginx Upstream连接后端有两种方式:短连接和长连接。Keep-Alive即俗称的长连接,使客户端到服务端建立的连接持续有效,当对服务器发起后续请求时,Keep-Alive功能可以复用先前使用过的连接,减少了重新建立连接所需的开销。通常使用HTTP协议采用的是请求应答模式,客户端到服务端的一次请求完成了,它们之间的连接也随之关闭。在某些应用场景下,比如后端RESTful服务,就需要保持住连接,这时就可以启用HTTP Keep-Alive。

一、概述

Nginx Upstream连接后端有两种方式:短连接和长连接。Keep-Alive即俗称的长连接,使客户端到服务端建立的连接持续有效,当对服务器发起后续请求时,Keep-Alive功能可以复用先前使用过的连接,减少了重新建立连接所需的开销。通常使用HTTP协议采用的是请求应答模式,客户端到服务端的一次请求完成了,它们之间的连接也随之关闭。在某些应用场景下,比如后端RESTful服务,就需要保持住连接,这时就可以启用HTTP Keep-Alive。 nginx 通常情况下都是用来当作一个反向代理,通常一个请求都需要经过 client -> nginx -> backend_server 这么几成关系。通常情况下 client -> nginx 使用的 HTTP 1.1 或者 2.0 的协议,keep-alive 复用了 TCP 的连接,减少了 TCP 频发创建和销毁带来的性能损失。但是默认情况下,nginx -> backend_server 是 HTTP 1.0 的协议,并没有复用 TCP 的连接。

对发往上游请求当中要加上http头部图片里面的两条指令proxy_http_version和proxy_set_header,因为http 1.0协议是不支持keepalive长连接的,为了防止用户发来的是http 1.0协议我们需要重置http_version为1.1,这样一直可以使用keepalive长连接。其次为了防止用户connection头部给我们传入的是closed而不是keepalived,我们需要主动设置向上游发的Connection值为Connection “”。

二、配置

1、语法

功能:通过复用连接,降低Nginx与上游服务器建立,关闭连接的消耗,提升吞吐量的同时降低时间延迟.
模块:ngx_http_upstream_keepalive_module是默认编入到Nginx中的,如果不想编进去可以用
     --without-http_upstream_keepalive_module对这个模块进行移除.
(/home/muten/module/nginx-1.13.7中执行./configure --help |more 搜索http_upstream_keepalive_module可验证)

关于upstream_keepalive的指令:
(1)keepalive
Activates the cache for connections to upstream servers.
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.
表示上游服务器中最多保持多少个用于keepalive请求的空闲的连接.
这个命令会促使上游服务器中每个worker进程中开辟出来一块缓存用于keepalive连接,
当超过这个数字的时候,将会利用LRU算法将一些连接关闭.

因为http1.0协议是不支持长连接的,为了防止用户发来的是http1.0,我们需要重置http版本,将其置成1.1,这样就可以一直使用keep_alive长连接;
为了防止用户的Connection头部给我们传递的是Close而不是Keepalive,我们主动设置向上游发送的connection.

When using load balancing methods other than the default round-robin method, it is necessary to activate them
before the keepalive directive.
当使用的负载均衡方法不是默认的轮询算法时,需要在keepalive指令之前激活他们

语法:
Syntax: keepalive connections;
Default:    —
Context:    upstream
This directive appeared in version 1.1.4.

Syntax: proxy_http_version 1.0 | 1.1;
Default:    
proxy_http_version 1.0;
Context:    http, server, location
This directive appeared in version 1.1.4.

Syntax: proxy_set_header field value;
Default:    
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Context:    http, server, location

对上游连接的http头部设定:
proxy_http_version 1.1;
proxy_set_header Connection "";

配置
upstream http_backend {
   server 127.0.0.1:8080;
   keepalive 16;
   keepalive_timeout 60s;
}

server {
   ...
   location /http/ {
       proxy_pass http://http_backend;
       proxy_http_version 1.1;
       proxy_set_header Connection "";
       ...
   }
}

2、实现原理

nginx upstream keepalive长连接的实现原理。首先每个进程需要一个connection pool,里面都是长连接,多进程之间是不需要共享这个连接池的。 一旦与后端服务器建立连接,则在当前请求连接结束之后不会立即关闭连接,而是把用完的连接保存在一个keepalive connection pool里面,以后每次需要建立向后连接的时候,只需要从这个连接池里面找,如果找到合适的连接的话,就可以直接来用这个连接,不需要重新创建socket或者发起connect()。这样既省下建立连接时在握手的时间消耗,又可以避免TCP连接的slowstart。如果在keepalive连接池找不到合适的连接,那就按照原来的步骤重新建立连接。 如果你的连接池的数控制在128,总共线程池内的线程数是128 * nginx worker ,但因为你要应对更多的并发请求,所以临时又加了很多的连接,但这临时的连接是短连接和长连接要看你的nginx版本,1.8是长连接,那他如何被收回,两点保证,一点是他会主动去释放,另一点是keepalive timeout的时间

本文来源:www.lxlinux.net/11200.html,若引用不当,请联系修改。

相关文章 8

2

CentOS中常用的yum命令 3分钟前

yum是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器,基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动...

3

Linux下查看和修改主机名具体方法 4分钟前

Linux系统下如何查看和修改主机名?本篇文章为大家分享一下Linux下查看和修改主机名的方法,有需要的小伙本可以参考一下。 查询主机名:...

4

韩国vps线路(韩国大带宽vps) 6分钟前

目录:1、韩国vps服务器哪家好2、谁来科普一下,香港,俄罗斯,新加坡,日本,韩国的vps3、vps韩国uplus线路好吗4、哪里的韩国vps比较好,...

5

改进你的脚本程序具体方法 7分钟前

你是否曾经查看过某个软件发行方提供的安装用的脚本script程序?为了能够适应不同用户的系统配置,顺利完成安装,这些脚本程序经常包含...

6

来宾云服务器(来宾市联动云) 8分钟前

目录:1、swift和cinder的区别2、如何在服务器直接安装discuz3、腾讯云服务器遇到这种情况怎么办4、服务器和数据库异常用户,安全狗无法防护...

7

Linux系统如如何启动时自动运行命令或脚本 11分钟前

Linux系统如何要在重启时或系统启动时运行 命令 或 脚本 ?本篇文章将通过两种方法为大家演示在 CentOS /RHEL 以及 Ubuntu 系统上重启时或系统...

8

Ubuntu中安装 Python 3.8 13分钟前

Python 3.8是Python语言的最新版本,它适合用于编写脚本、自动化以及机器学习和Web开发等各种任务。现在Python 3.8已经进入官方的beta阶段,这...