阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx上游服务器长连接配置

352次阅读
没有评论

共计 3000 个字符,预计需要花费 8 分钟才能阅读完成。

导读 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 的连接。
Nginx 上游服务器长连接配置

对发往上游请求当中要加上 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 的时间

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计3000字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7966473
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示

亚马逊云崩完,微软云崩!当全球第二大云“摔了一跤”:Azure 宕机背后的配置风险与警示 首先来回顾一下 10...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...