IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Nginx 的配置文件中的 keepalive 介绍 -> 正文阅读

[系统运维]Nginx 的配置文件中的 keepalive 介绍

Nginx 的配置文件中 http 模块有关于 keepalive 的一些字段,这里的 keepalive 表示的是 HTTP1.1 的长连接

长连接

HTTP/1.0 性能上的一个很大的问题,那就是每发起一个请求,都要新建一次 TCP 连接(三次握手),而且是串行请求,做了无谓的 TCP 连接建立和断开,增加了通信开销。

为了解决上述 TCP 连接问题,HTTP/1.1 提出了长连接的通信方式,也叫持久连接。这种方式的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。

持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态
在这里插入图片描述

Nginx 的配置文件

在这里插入图片描述

worker_processes  1;

events {
    worker_connections  1024;	
}

# http 模块
http {
    include       mime.types;
    default_type  application/octet-stream;	

    sendfile        on;	

    # 当进行TCP连接后,如果在 65s 内没有活动,则关闭长连接
    # 即在点击一个链接后,在65s内没有点击另一个链接,则会关闭当前TCP连接
    # 如果在65s内点击了其它链接,则会复用当前的TCP连接,不用进行三次握手
    keepalive_timeout  65; 
    #keepalive_timeout  0;	# 超时时间为 0 表示不使用 TCP 长连接
	keepalive_disable msie6;
	keepalive_requests 1000;
	keepalive_time 1h;

	upstream httpds {
        server  192.168.137.129:80;	# A 服务器
        server  192.168.137.130:80;	# B 服务器
		keepalive	32;
    }

    server {
        listen       80;
        server_name  localhost;

        location / {
        	proxy_http_version	1.1;	# 配置 http 版本,默认是 http1.0,不支持长连接
        	proxy_set_header	Connection:"";	# 将 Connction:close 中的 close 去掉	
            proxy_pass http://httpds;	# 转发到 httpds 中的服务器中
        }
    }
}

http 模块中的 keepalive

keepalive_disable none | browser ...;

禁用不支持长连接的的浏览器的开启此功能。browser 参数指定哪些浏览器将不能开启 keepalive 功能。该字段的默认值是 msie6,即表示使用微软的 IE6.0 浏览器发起请求,将不支持开启 keepalive 功能;如果值是 safari ,则表示 Mac 系统中的 safari 浏览器不能开启 keepalive 功能;值为 none 表示所有浏览器都可以支持该功能。

keepalive_requests number; # number 默认值是 1000

设置一个长连接中能够处理的最大请求数 number。一个连接中的请求数量超过 number 后,将关闭连接。 定期关闭连接对于释放每个连接的内存分配是必要的。因此,使用过高的最大请求数可能会导致内存使用过多,不推荐使用。

keepalive_time time; # time 默认值是 1h

限制通过一个长连接可以处理请求的最长时间。达到这个时间后,将关闭这个连接。它的默认值是 1小时,即一个连接在开启超过一小时后,将会强制关闭。

keepalive_timeout timeout; # timeout 默认值为 75s

第一个参数 timeput 表示一个连接的超时时间,如果在 timeout 时间内再次发起请求,将会复用当前已经打开的长连接,并将 timeout 重置(默认值则重置为75s)。timeput 为 0 表示不使用长连接功能。

upstream 模块中的 keepalive

Nginx 中的 upstream 又称为上游服务器(即下图中的 Tomcat 服务器)。
从浏览器中发起的请求会发送到 Nginx 中取,然后 Nginx 会做一些处理(如过滤信息等操作)把请求转发到上游服务器中,然后 Tomcat 处理请求,并将请求的数据返回给浏览器。
在这里插入图片描述

在浏览器把请求发到 Nginx 时,请求报文中携带着一些浏览器的信息,如 User-Agent、Connection 等信息。但是 Nginx 将请求报文转发到 Tomcat 时,会把关于浏览器的一些信息给清除掉,从而导致 Tomcat 并不知道请求到底是哪个用户发起的,它只知道是 Nginx 向它发起的请求。

在这里插入图片描述

经过 Nginx 把报文请求头的一些信息清除后,Connection 中的信息也被清除了,所以它转发的请求报文中的 Connection 的值是 close,即 Connection :close,这表示不启用长连接功能,将导致 Nginx 每转发一次请求都需要重新经过三次握手建立一个新的连接。

所以在 Nginx 转发请求到上游服务器时也需要开启长连接的功能,只需要在 upstream 模块中添加上 keepalive 相关的字段就可以启用相关功能了。

upstream httpds {
    server  192.168.137.129:80;	# A 服务器
    server  192.168.137.130:80;	# B 服务器
    
	keepalive	32;
	keepalive_timeout  65; 
	keepalive_requests 1000;
	keepalive_time 1h;
}

server {
    listen       80;
    server_name  localhost;

    location / {
    	# 转发时使用 http1.1 进行转发
    	proxy_http_version	1.1;	# 配置 http 版本,默认是 http1.0,不支持长连接
    	proxy_set_header	Connection:"";	# 将 Connction:close 中的 close 去掉	
        proxy_pass http://httpds;	# 转发到 httpds 中的服务器中
    }
}

keepalive 表示将启用转发到上游服务器的长连接,它的值为在每个工作进程缓存中的上游服务器的最大空闲长连接数,当超过这个数字时,最近最少使用的连接将被关闭。

keepalive_timeout 、keepalive_requests、keepalive_time 的含义和 http 模块上的含义是一样的。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-16 21:53:05  更:2022-06-16 21:53:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 1:44:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码