nginx服务基础用法(概念、安装、热升级)

目录

一、I/O模型概述

1、I/O概念

1.1 计算机的I/O

1.2 Linux的I/O

2、零拷贝技术

3、同步/异步(消息反馈机制)

4、阻塞/非阻塞

5、网络I/O模型

5.1 阻塞型 I/O 模型(blocking IO)

5.2 非阻塞型 I/O 模型 (nonblocking IO)

5.3  多路复用 I/O 型 ( I/O multiplexing )

5.4 信号驱动式 I/O 模型

5.5 异步 I/O 模型 (asynchronous IO)

二、nginx介绍

1、nginx概述

1.1 nginx概念

1.2 nginx特性

1.3 nginx工作原理

1.4 nginx优缺点

2、nginx事件驱动模型

2.1 select

2.2 poll

2.3 epoll

2.4 nginx支持高并发

3、nginx的两种进程

4、nginx模块

​5、nginx和Apache的区别

三、安装nginx

1、yum部署

1.1 yum安装nginx

1.2 yum安装nginx的配置文件

2、编译安装nginx

2.1 编译安装nginx过程

2.2 启动停止nginx

2.3 创建nginx自启动文件

3、nginx安装包文件详解

四、nginx命令详解

1、nginx基础命令语法

2、nginx信号与reopen分割日志

2.1 nginx信号

2.2 reopen分割日志

五、热升级(nginx/1.18-->nginx/1.20)

1、热升级的概念

2、nginx热升级具体步骤

3、从当前版本回滚到之前版本

 


一、I/O模型概述

1、I/O概念

1.1 计算机的I/O

I/O在计算机中指Input/Output, IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。

一次完整的I/O是用户空间的进程数据与内核空间的内核数据的报文的完整交换,但是由于内核空间与用户空间是严格隔离的,所以其数据交换过程中不能由用户空间的进程直接调用内核空间的内存数据,而是需要经历一次从内核空间中的内存数据copy到用户空间的进程内存当中,所以简单说I/O就是把数据从内核空间中的内存数据复制到用户空间中进程的内存当中

1.2 Linux的I/O

  • 磁盘I/O 磁盘I/O是进程向内核发起系统调用,请求磁盘上的某个资源比如是html 文件或者图片,然后内核通过相应的驱动程序将目标文件加载到内核的内存空间,加载完成之后把数据从内核内存再复制给进程内存,如果是比较大的数据也需要等待时间

  • 网络I/O : Linux一切皆文件,本质为对socket文件的读写 网络通信就是网络协议栈到用户空间进程的IO就是网络IO

2、零拷贝技术

零拷贝(Zero Copy)技术是一种优化计算机系统性能的技朮,它的主要目标是减少数据在内存和磁盘之间的复制次数,从而减少 CPU 的使用率和 I/O 操作的延迟

为什么需要零拷贝技术:

因为在传统的 I/O 操作中,数据通常需要经过多次复制才能从一个地方移动到另一个地方。例如,当一个应用程序从磁盘读取数据时,数据首先会被复制到内核的缓冲区,然后再被复制到应用程序的用户空间。这种复制操作会消耗大量的CPU时间和内存带宽

为解决问题,就产生了零拷贝技术:

零拷贝技术通过减少或消除这些复制操作来提高系统的性能。例如,当一个应用程序从磁盘读取数据时,数据可以直接从磁盘读取到应用程序的用户空间,而不需要经过内核的缓冲区。同样,当一个应用程序向网络发送数据时,数据可以直接从应用程序的用户空间发送,而不需要经过内核的缓冲区

3、同步/异步(消息反馈机制)

关注的是消息通信机制,即调用者在等待一件事情的处理结果时,被调用者是否提供完成状态的通知

  • 同步:synchronous,被调用者并不提供事件的处理结果相关的通知消息,需要调用者主动询问事情是否处理完成

  • 异步:asynchronous,被调用者通过状态、通知或回调机制主动通知调用者被调用者的运行状态

4、阻塞/非阻塞

关注调用者在等待结果返回之前所处的状态

  • 阻塞:blocking,指IO操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起,干不了别的事情

  • 非阻塞:nonblocking,指IO操作被调用后立即返回给用户一个状态值,而无需等到IO操作彻底完成,在最终的调用结果返回之前,调用者不会被挂起,可以去做别的事情

5、网络I/O模型

阻塞型、非阻塞型、复用型、信号驱动型、异步

5.1 阻塞型 I/O 模型(blocking IO)

阻塞IO模型是最简单的I/O模型,用户线程在内核进行IO操作时被阻塞用户线程通过系统调用read发起I/O读操作,由用户空间转到内核空间。内核等到数据包到达后,然后将接收的数据拷贝到用户空间,完成read操作用户需要等待read将数据读取到buffer后,才继续处理接收的数据。整个I/O请求的过程中,用户线程是被阻塞的,这导致用户在发起IO请求时,不能做任何事情,对CPU的资源利用率不够

  • 优点

程序简单,在阻塞等待数据期间进程/线程挂起,基本不会占用 CPU 资源

  • 缺点

每个连接需要独立的进程/线程单独处理,当并发请求量大时为了维护程序,内存、线程切换开销较大,apache 的preforck使用的是这种模式

5.2 非阻塞型 I/O 模型 (nonblocking IO)

在非阻塞 I/O 模型中,当一个进程发起一个 I/O 操作(如读取文件、发送网络数据等),操作系统会立即返回一个结果,而不是等待 I/O 操作完成。如果 I/O 操作立即完成,那么结果就是 I/O 操作的结果;如果 I/O 操作没有立即完成,那么结果就是一个错误码,表示 I/O 操作还在进行

进程可以通过轮询或者事件通知等方式,不断地查询 I/O 操作的结果。如果 I/O 操作已经完成,那么进程就可以处理 I/O 操作的结果;如果 I/O 操作还在进行,那么进程就可以继续执行其他任务

  • 优点

可提高系统的并发性能,因为一个进程可以在等待 I/O 操作完成的同时,继续执行其他任务

  • 缺点

需要进程不断地查询 I/O 操作的结果,这可能会消耗大量的 CPU 时间

5.3  多路复用 I/O 型 ( I/O multiplexing )

一个进程可以使用一个系统调用(如 select()、poll() 或 epoll())来监视多个 I/O 事件。当一个或多个 I/O 事件准备好时,系统调用就会返回,告诉进程哪些 I/O 事件已经准备好

进程可以通过轮询或者事件通知等方式,不断地查询系统调用的结果。如果一个 I/O 事件已经准备好,那么进程就可以处理这个 I/O 事件;如果没有 I/O 事件准备好,那么进程就可以继续执行其他任务

  • 优点

可以提高系统的并发性能,因为一个进程可以同时监视多个 I/O 事件

  • 缺点

需要进程不断地查询系统调用的结果,这可能会消耗大量的 CPU 时间

5.4 信号驱动式 I/O 模型

 在信号驱动式 I/O 模型中,一个进程可以使用一个系统调用(如 sigaction())来设置一个信号处理函数。当一个 I/O 事件准备好时,操作系统就会发送一个信号给进程,进程就会调用信号处理函数来处理这个 I/O 事件

  • 优点

可以提高系统的并发性能,因为一个进程可以在 I/O 事件准备好时,立即处理这个 I/O 事件

  • 缺点

需要进程设置信号处理函数,这可能会增加程序的复杂性

5.5 异步 I/O 模型 (asynchronous IO)

在异步 I/O 模型中,允许一个进程在发起 I/O 操作后,不需要等待 I/O 操作完成,就可以继续执行其他任务。当 I/O 操作完成后,操作系统会通知进程,进程就可以处理 I/O 操作的结果

在异步 I/O 模型中,一个进程可以使用一个系统调用(如 aio_read() 或 aio_write())来发起一个异步 I/O 操作。当 I/O 操作完成后,操作系统就会发送一个信号或者调用一个回调函数来通知进程

  • 优点

可以提高系统的并发性能,因为一个进程可以在发起 I/O 操作后,立即处理其他任务

  • 缺点

需要操作系统支持,而且可能会增加程序的复杂性 

二、nginx介绍

1、nginx概述

1.1 nginx概念

Nginx(发音为"engine x")是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。Nginx 是由 Igor Sysoev 创建的,第一个公开版本发布于 2004 年。Nginx 以其高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名

1.2 nginx特性

  • 高性能:Nginx 是一个事件驱动的服务器,它使用异步非阻塞 I/O 模型,可以处理大量并发连接,适合用于高负载的 Web 服务器环境

  • 低资源消耗:Nginx 的内存消耗量通常比 Apache 低得多,这使得 Nginx 在资源有限的环境中表现得更好

  • 反向代理:Nginx 可以作为反向代理服务器,用于负载均衡、缓存、SSL 终端、HTTP/2 和 WebSocket 等功能

  • 模块化设计:Nginx 的设计是模块化的,可以通过加载不同的模块来扩展其功能,例如 gzip 压缩、SSL 加密、URL 重写、访问控制等

  • 简单的配置:Nginx 的配置文件使用简单的文本格式,易于理解和修改

  • 支持热部署:Nginx 支持热部署,可以在不中断服务的情况下重新加载配置文件

  • 支持多种平台:Nginx 可以运行在多种 Unix-like 系统上,包括 Linux、FreeBSD、Solaris、Mac OS X 和 AIX,也可以运行在 Windows 上

1.3 nginx工作原理

Nginx 的工作原理是基于事件驱动的架构。

当一个请求到达 Nginx 时,Nginx 会将其分发给一个工作进程(worker process)。这个工作进程会处理这个请求,然后将响应返回给客户端。在这个过程中,Nginx 不会阻塞,可以继续处理其他请求

1.4 nginx优缺点

  • 优点

①可以跨平台,配置简单,内存消耗少,10个nginx才占用150M内存。

②使用的是epoll模型,这种模型是I/O多路复用技术(I/O多路复用是一种技术,它允许一个进程或线程监控多个网络连接,当其中某个或某几个连接有数据时,当前程序可以拿到网卡收到的数据进行下一步的处理;),异步非阻塞的模型(异步非阻塞模型可以提高程序的效率,在等待I/O操作完成的同时,可以继续执行其他代码。)

③nginx支持高并发连接,处理2-3万并发连接数,官方监测能支持5万并发。

④成本低,且开源,稳定性高,宕机概率非常小;

⑤内置的健康检查功能,可以允许在服务器宕机的时候,做健康检查,再发送的请求就不会发给宕机的服务器,会重新提交到其他节点上

  • 缺点

①nginx不方便处理动态资源,可以进行动静分离,将动态请求交给后端程序去进行处理

②不支持 .htaccess 文件、不支持 HTTP/2 的所有特性、不支持 WebDAV 和 CalDAV

2、nginx事件驱动模型

nginx使用多路复用I/O模型,一个进程可以使用一个系统调用(如 select()、poll() 或 epoll())来监视多个 I/O 事件。当一个或多个 I/O 事件准备好时,系统调用就会返回,告诉进程哪些 I/O 事件已经准备好

2.1 select

一个应用程序,代理系统功能处理异步请求,最大连接数是1024个

它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长

2.2 poll

select加强版取消了1024最大连接数

poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态, 但是它没有最大连接数的限制,原因是它是基于链表来存储的

2.3 epoll

poll的加强版

epoll可以理解为event poll,不同于忙轮询和无差别轮询,epoll会把哪个流发生了怎样的I/O事件通知我们。所以我们说epoll实际上是事件驱动(每个事件关联上fd)的,此时我们对这些流的操作都是有意义的

selectpollepoll
操作方式遍历遍历回调
底层实现数组链表哈希表
I/O效率每次调用都进行线性遍历,时间复杂度为0(n)每次调用都进行线性遍历,时间复杂度为0(n)事件通知方式,每当fd就绪,系统注册的回调函数就会被调用,将就绪的fd放到rdlst里,时间复杂度0(1)
最大连接数

1024(x86)

2048(x64)

无上限无上限
fd拷贝每次调用select都需要把fd集合从用户拷贝到内核态每次调用select都需要把fd集合从用户拷贝到内核态调用epoll_ctl时拷贝进内核并保存,之后每次epoll_wait不拷贝

2.4 nginx支持高并发

最核心的原因:nginx是异步,非阻塞,使用 epoll ,和并且可以进行简单的配置细节优化。

假设一个server采用一个进程(或者线程)负责一个请求的方式,那么进程的数量就是并发的数量,那么会有很多进程在等待中,等待网络的传输,非常耗时耗资源。

但是nginx是使用了异步非阻塞的程序运行方式,解决了等待浪费时间的痛点,有一个专门进行调度进程,每次有一个request请求,就可以分配给worker进程去进行处理,web server 的工作性质决定了每个 request 的大部份生命都是在网络传输中,实际上花费在 server 机器上的时间片不多。这是几个进程就解决高并发的秘密所在

3、nginx的两种进程

  • Master 进程:这是 Nginx 的主进程,它负责读取和解析配置文件,以及创建和管理工作进程。Master 进程通常只有一个,它不处理网络连接,而是通过创建多个工作进程来处理网络连接

  • Worker 进程:这是 Nginx 的工作进程,它负责处理网络连接。Worker 进程通常有多个,它们之间是独立的,每个进程都有自己的事件循环。当一个新的网络连接到达时,Master 进程会选择一个空闲的 Worker 进程,然后将这个网络连接交给这个 Worker 进程处理

这种设计使得 Nginx 能够处理大量的并发连接,而且能够充分利用多核 CPU 的性能

4、nginx模块

  • 核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件驱动机制 、进程管理等核心功能
  • 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应头设置等
  • 可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如:Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等
  • 邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持
  • Stream服务模块: 实现反向代理功能,包括TCP协议代理 反向
  • 第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支持等

①核心模块:core module
②标准模块:
 HTTP 模块: ngx_http_*
 HTTP Core modules   #默认功能
 HTTP Optional modules #需编译时指定
 Mail 模块: ngx_mail_*
 Stream 模块 ngx_stream_*
③第三方模块

5、nginx和Apache的区别

  • nginx是轻量级,nginx比apache 占用更少的内存及资源
  • 静态处理,Nginx 静态处理性能比 Apache 高
  • Nginx可以实现无缓存的反向代理加速,提高网站运行速度
  • Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于硬件
  • Nginx支持热部署,启动速度迅速,可以在不间断服务的情况下,对软件版本或者配置进行升级
  • nginx是异步进程,基于事件的web服务器,多个连接对应一个进程 ;apache是同步多进程,基于流程的web服务器,一个连接对应一个进程
  • Nginx高度模块化,编写模块相对简单,且组件比Apache少
  • nginx抗并发,nginx处理请求是异步非阻塞的,而Apache则是阻塞性的,在高并发下的nginx能够保持低资源,低消耗高性能

三、安装nginx

1、yum部署

1.1 yum安装nginx

①使用yum部署Nginx需要先安装epel-release扩展包,官方源默认没有Nginx的yum源

yum install epel-release -y    #安装epel-release扩展源

②扩展源安装完后直接安装nginx

yum install nginx -y     #安装nginx服务

1.2 yum安装nginx的配置文件

/etc/nginx.conf主配置文件
/usr/share/nginx/html默认网页文件根目录
/var/log/nginx/默认日志文件

2、编译安装nginx

最好使用编译安装nginx,因为yum安装的nginx模块较少,而编译安装可以添加特定的模块

2.1 编译安装nginx过程

①下载安装包

官网下载安装包,nginx官网地址:www.nginx.org,进入后找到右边菜单栏的download,进入后选择自己想要下载的版本可以直接下载到本地,然后传到Linux系统中或右键复制该包的下载连接在Linux系统中wget此地址直接下载到Linux系统中

[root@localhost ~]#cd /data        #切换到想要的目录下载安装包
[root@localhost data]#wget http://nginx.org/download/nginx-1.18.0.tar.gz

② 安装包下载完成后解压到当前目录,并安装编译需要的依赖环境和工具,再新建nginx用户便于管理

[root@localhost data]#tar xf nginx-1.18.0.tar.gz          #解压源码包
[root@localhost nginx-1.18.0]#cd nginx-1.18.0/            #切换目录
#下载安装所需编译工具
[root@localhost nginx-1.18.0]#yum -y install gcc gcc-c++ pcre-devel openssl-devel zlib-devel openss1 openss1-deve1
#新建nginx用户便于管理
[root@localhost nginx-1.18.0]#useradd -M -s /sbin/nologin nginx

③编译安装三步骤(./configure、make、make install)

#执行脚本,指定安装位置、指定用户为nginx用户、指定组为nginx组、指定安装的模块
[root@localhost nginx-1.18.0]#./configure --prefix=/apps/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module#将所有源代码翻译成二进制,形成一个可执行文件
[root@localhost nginx-1.18.0]#make -j2
#将执行文件及相关的依赖文件拷贝到指定目录中
[root@localhost nginx-1.18.0]#make install

④修改权限

[root@localhost ~]#chown -R nginx.nginx /apps/nginx

⑤创建软链接,便于tab键补全

[root@localhost ~]#ln -s /apps/nginx/sbin/nginx /usr/bin

⑥设置配置文件关键词高亮

[root@localhost ~]#cp -r /data/nginx-1.18.0/contrib/vim/*    /usr/share/vim/vimfiles/

2.2 启动停止nginx

#启动
[root@localhost ~]#/apps/nginx/sbin/nginx      #绝对路径启动
或者
[root@localhost ~]#nginx                       #创建软连接后直接启动
[root@localhost ~]#ps aux |grep nginx   #通过查看是否有nginx进程反映nginx是否开启

#停止
[root@localhost ~]#killall  nginx

2.3 创建nginx自启动文件

[root@localhost ~]#vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf   #注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
LimitNOFILE=100000
[Install]
WantedBy=multi-user.target[root@localhost ~]#systemctl daemon-reload           #重新加载配置
[root@localhost ~]#systemctl enable --now nginx      #开机自启并立即启动

3、nginx安装包文件详解

  • contrib:存放vim格式文件,可以修改nginx配置文件的格式
  • conf:存放配置文件
  • man:存放man帮助文件
#查看man帮助
[root@localhost man]#man /data/nginx-1.18.0/man/nginx.8 
  • src:源码包,用于存放nginx软件的源代码文件
#用于统计共有多少源代码文件
[root@localhost nginx-1.18.0]#find src -type f |xargs cat |wc -l

  • html:目录中保存了nginx服务器的web文件,但是可以更改为其他目录保存web文件,另外还有一个50x的web文件是默认的错误页面提示页面
  • logs:用来保存nginx服务器的访问日志错误日志等日志,logs目录可以放在其他路径,比如/var/logs/nginx里面
  • sbin:保存nginx二进制启动脚本,可以接受不同的参数以实现不同的功能

四、nginx命令详解

1、nginx基础命令语法

#帮助
[root@localhost ~]#nginx -h
#格式
nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
选项说明
-v显示当前系统nginx版本
-V显示nginx编译详细情况、模块等信息
-s

发信号

-s  stop        立即关闭nginx

-s  quit         优雅退出 ,不影响业务的状态下退出

-s  reload     重新加载

-g指定配置,不已配置文件中的为准
-t检查语法格式
-T检测配置文件是否有语法错误,转储
-p  prefix设置前缀路径(默认是:/etc/nginx/)
-e  filename错误日志文件(默认是/var/log/nginx/error.log)
-c filename设置配置文件(默认是:/etc/nginx/nginx.conf)

-q

在检测配置文件期间屏蔽非错误信息

显示版本信息:

[root@localhost ~]#nginx -v

显示编译详细信息模块等信息:

[root@localhost ~]#nginx -V

检查语法错误:

[root@localhost ~]#nginx -t

2、nginx信号与reopen分割日志

2.1 nginx信号

[root@localhost ~]#kill -l     #查看信号

nginx的信号:

①quit信号 -----SIGTERM,直接停止,不等服务执行完,nginx -s quit或kill -TERM执行

②stop信号-----SIGQUIT,优雅的退出,等所有服务执行完再退出,nginx -s stop 或kill -QUIT执行

③reopen信号---SIGUSER1 分隔日志

创建新的nginx日志时需要发送USER1信号给nginx主进程才可以生效。kill -USER1 nginx主进程pid号。

④SIGUSER2信号,优雅的升级,不影响正在使用的用户,kill -USER2执行。

⑤reload信号----SIGHUP,重新加载配置文件,nginx -s  reload或kill -HUP执行。

2.2 reopen分割日志

客户端每次访问服务器,服务器都会产生相应的日志内容在access.log文件

现在如何分割日志呢?

方法一:

#nginx服务器操作
[root@localhost logs]#mv access.log access.log.bak1
[root@localhost logs]#touch access.log
#重新打开日志文件,否则依然写入.bak
[root@localhost logs]#nginx -s reopen

方法二:

#nginx服务器操作
[root@localhost logs]#mv access.log access.log.bak2
[root@localhost logs]#touch access.log
#重新打开日志文件,否则依然写入.bak
[root@localhost logs]#pstree -p | grep nginx
[root@localhost logs]#kill -s USR1 1723

 区别:

[root@localhost logs]#nginx -s reopen    #使用nginx命令不需要跟主进程的pid
[root@localhost logs]#kill -s USR1 1723  #使用kill命令需要跟主进程的pid

五、热升级(nginx/1.18-->nginx/1.20)

1、热升级的概念

热升级指的是在系统运行过程中对软件或系统进行升级操作,而不需要停止当前正在执行的服务或进程。这意味着在进行升级时,系统可以继续提供服务,对用户来说基本无感知

nginx热升级过程:

①将旧Nginx文件换成新Nginx文件(注意备份)

②向master进程发送USR2信号

③master进程修改pid文件名,加后缀.oldbin

④master进程用新Nginx文件启动新master进程,系统中将有新旧两个Nginx主进程共同提供Web服务

⑤向旧的Nginx服务进程发送WINCH信号,使旧的Nginx worker进程平滑停止,并删除Nginx.pid.oldbin文件

⑥向旧master进程发送QUIT信号,关闭老master

⑦如果发现升级有问题,可以回滚向老master发送HUP,向新master发送QUIT

2、nginx热升级具体步骤

①下载nginx/1.20的安装包并解压

[root@localhost logs]#cd /data
[root@localhost data]#wget https://nginx.org/download/nginx-1.20.2.tar.gz
[root@localhost data]#tar xf nginx-1.20.2.tar.gz 
[root@localhost data]#cd nginx-1.20.2/

②安装模块

[root@localhost nginx-1.20.2]#./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module

③编译,但不需要安装

[root@localhost nginx-1.20.2]#make

④查看nginx版本

[root@localhost nginx-1.20.2]#cd objs/
[root@localhost objs]#nginx -v
[root@localhost objs]#./nginx -v

⑤备份旧版本的nginx

[root@localhost objs]#cd /apps/nginx/sbin/
[root@localhost sbin]#mv nginx nginx.bak
[root@localhost sbin]#cp /data/nginx-1.20.2/objs/nginx .
[root@localhost sbin]#ls

⑥升级

[root@localhost sbin]#pstree -p | grep nginx
[root@localhost sbin]#kill -USR2 1723
[root@localhost sbin]#pstree -p | grep nginx
[root@localhost sbin]#ps -aux|grep -v grep|grep nginx

⑦优雅的退出旧版本(不影响正在使用的客户端) 

测试:先用客户端下载服务器的资源,当服务器退出旧版本更新新版本后,查看现在客户端下载是否中断

#服务器操作
#先生成大文件来方便客户端下载
[root@localhost sbin]#dd if=/dev/zero of=/apps/nginx/html/m.img bs=1G count=10
#客户端操作
[root@localhost ~]#wget --limit-rate=1M http://172.16.12.10/m.img
#服务器操作
[root@localhost sbin]#ss -ntap|grep 80
[root@localhost sbin]#kill -WINCH `cat /apps/nginx/logs/nginx.pid.oldbin`
[root@localhost sbin]#ss -ntap|grep 80

#客户端操作
[root@localhost ~]#curl -I 172.16.12.10

⑧kill旧进程 

3、从当前版本回滚到之前版本

前提:在旧版本的master还在的情况下

如果不在就先唤醒旧的进程,再进行操作

#唤醒旧进程
[root@localhost sbin]#kill -HUP `cat /apps/nginx/logs/nginx.pid.oldbin`

[root@localhost ~]#cd /apps/nginx/sbin/
[root@localhost sbin]#mv nginx nginx.1.20
[root@localhost sbin]#mv nginx.bak nginx
[root@localhost sbin]#systemctl restart nginx.service

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/698428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外包干了两个月,技术退步明显。。。。。

先说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

SD-WAN云专线:优越性能助力企业云上腾飞

随着企业数字化转型的推进,SD-WAN云专线作为一项安全、高速、低延迟、稳定可靠的专属连接通道,正迅速崭露头角。该技术通过连接用户办公点、数据中心以及各类云环境,构建强大的网络基础设施,助力企业轻松实现跨域云网数据互通&…

uniapp微信小程序解决上方刘海屏遮挡

问题 在有刘海屏的手机上,我们的文字和按钮等可能会被遮挡 应该避免这种情况 解决 const SYSTEM_INFO uni.getSystemInfoSync();export const getStatusBarHeight ()> SYSTEM_INFO.statusBarHeight || 15;export const getTitleBarHeight ()>{if(uni.get…

AI副业项目分享

在上一篇文章《这才是大学生该做的副业,别再痴迷于游戏了!》中,我分享了一些副业的想法,接着有不少同学问我:具体如何做?这是真把我给整蒙了,这里分享下我可以提供的产品和服务吧,并…

Vant轮播多个div结合二维数组的运用

需求说明 在开发H5的时候,结合Vant组件的轮播组件Swipe实现如下功能。我们查阅vant组件库官方文档可以得知,每个SwipeItem组件代表一个卡片,实现的是每屏展示单张图片或者单个div轮播方式,具体可以查阅:Vant 2 - 轻量、…

Mysql中like %xxx% 模糊查询该如何优化

背景: 实际项目中,like %xxx%的情况其实挺多的,比如某个表单如果支持根据公司名进行搜索,用户一般都是输入湖南xxx有限公司中的xxx进行搜索,所以对于接口而言,就必须使用like %xxx%来支持,从而…

C#,入门教程(05)——Visual Studio 2022源程序(源代码)自动排版的功能动画图示

上一篇: C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合https://blog.csdn.net/beijinghorn/article/details/123533838 新来的徒弟们交上来的C#代码,可读性往往很差。 今天一问才知道,他们居然不…

MIT6.S081学习——二、相关命令行整理

MIT6.S081学习——二、相关命令行整理 1 添加user代码到xv6中并编译2 git版本管理 1 添加user代码到xv6中并编译 问题:如何让在xv6中运行copy.c 答:在xv6中运行copy.c文件,你需要先将该文件添加到xv6源代码目录中,然后修改Makefil…

笔试题讲解(C语言进阶)

目录 前言 1、题目 2、答案 3、解析 结语 前言 “纸上得来终觉浅&#xff0c;绝知此事要躬行”。本篇通过对指针实际案例的分析&#xff0c;由浅入深&#xff0c;来加强我们对指针的理解。 1、题目 这是一道难题&#xff0c;小心哦。 #include <stdio.h> int main(…

值类型:左值、纯右值、将亡值

值类型是一个古老的概念&#xff0c;早在C98就存在了&#xff0c;但在C11之前这些都无关紧要&#xff0c;随着C11右值引用的产生值类型也被赋予了新的含义。 但问题是C11并未给出清晰的定义&#xff0c;比如在C11的标准文档中&#xff0c;左值的概念只有一句话&#xff1a;“指…

使用向量数据库pinecone构建应用02:检索增强生成RAG

Building Applications with Vector Databases 下面是这门课的学习笔记&#xff1a;https://www.deeplearning.ai/short-courses/building-applications-vector-databases/ Learn to create six exciting applications of vector databases and implement them using Pinecon…

Vue单文件学习项目综合案例Demo,黑马vue教程

文章目录 前言一、小黑记事本二、购物车三、小黑记账清单 前言 bilibili视频地址 一、小黑记事本 效果图 主代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"/><meta http-equiv"X-UA-Compatible&…

Open CASCADE学习|绘制砂轮

今天绘制一个砂轮&#xff0c;其轮廓由两条直线段和两段圆弧构成&#xff0c;圆弧分别与直线相切&#xff0c;两条圆弧之间相交而非相切。建模思路是&#xff1a;先给定两条直线段的起始点及长度&#xff0c;画出直线段&#xff0c;然后给定其中一圆弧的半径及圆心角&#xff0…

4核8G服务器能承受多少并发?

腾讯云4核8G服务器能承受多少并发&#xff1f;阿腾云的4核8G服务器可以支持20个访客同时访问&#xff0c;关于4核8G服务器承载量并发数qps计算测评&#xff0c;云服务器上运行程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#x…

Nginx网络服务

一、Nginx概述 1.1Nginx介绍 Nginx&#xff1a; 一款高新能、轻量级Web服务软件稳定性高系统资源消耗低对HTTP并发连接的处理能力高单台物理服务器可支持30 000&#xff5e;50 000个并发请求。 Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器&#xff0c;而且支持热部…

【LeetCode: 889. 根据前序和后序遍历构造二叉树 + DFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

使用Lombok @Data 出现java: 找不到符号 的问题

第一种&#xff1a;pom依赖最好如下方式 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>RELEASE</version><scope>compile</scope> </dependency>第二种&#xff1…

【Azure 架构师学习笔记】- Azure Databricks (10) -- UC 使用

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (9) – UC权限 在前面的文章&#xff1a;【Azure 架构师学习笔记】- Azure Databricks (6) - 配置Unity Catalog中演示了如何配置一个UC。 本文…

UE5 骨骼重定向

1.通过 VRoidStudio 1.26.0 软件创建模型 导出 2.下载ue插件 https://github.com/ruyo/VRM4U/releases 安装 重启 3.拖入创建的模型 到指定文件夹 4.为模型创建 IK绑定&#xff0c;重定向骨骼根 新增链条 5.创建IK 重定向&#xff0c;指定源 和 目标 IK绑定 6.

基于MPPT最大功率跟踪算法的涡轮机控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于MPPT最大功率跟踪算法的涡轮机控制系统simulink建模与仿真.mppt采用爬山法实现&#xff0c;仿真输出MPPT控制效果&#xff0c;功率&#xff0c;转速等。 2.系统仿真结果 …