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://xiahunao.cn/news/2803185.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

win系统下安装mysql5.7并配置环境变量、设置root用户和服务启动的详细操作教程

本篇文章主要讲解:win系统下安装mysql5.7并配置环境变量、设置root用户和服务启动的详细操作教程 日期:2024年2月22日 作者:任聪聪 一、mysql5.7版本的下载 官方下载地址:https://downloads.mysql.com/archives/community/ 步骤…

Spring框架@Autowired注解进行字段时,使用父类类型接收子类变量,可以注入成功吗?(@Autowired源码跟踪)

一、 前言 平常我们在使用spring框架开发项目过程中,会使用Autowired注解进行属性依赖注入,一般我们都是声明接口类型来接收接口实现变量,那么使用父类类型接收子类变量,可以注入成功吗?答案是肯定可以的!…

linux下执行文件包含^M,将window文件格式内容转为linux格式

查看文件内容 cat -v jvm_options 报错信息 ./bin/install-plugin.sh: /bigdata/opt/s/seatunnelsgg/apache-seatunnel-2.3.4/mvnw: /bin/sh^M: bad interpreter: No such file or directory install connector : connector-selectdb-cloud安装工具 yum install -y dos2uni…

一文了解LM317T的引脚介绍、参数解读

LM317T是一种线性稳压器件,它具有稳定输出电压的特性。LM317T可以通过调整其输出电阻来确保输出电压的稳定性,因此被广泛应用于各种电子设备中。 LM317T引脚图介绍 LM317T共有3个引脚,分别是: 输入引脚(输入电压V_in&…

本地配置多个git账户及ll设置

本地配置多个git账户 清除全局配置将命令行,切换到ssh目录生成GitLab和Gitee的公钥、私钥去对应的代码仓库添加 SSH Keys添加私钥ll设置 管理密钥验证仓库配置关于gitgitee.com: Permission denied (publickey) 清除全局配置 此步骤可以不做,经测试不影…

测试环境搭建整套大数据系统(六:搭建sqoop)

一:下载安装包 https://archive.apache.org/dist/sqoop/ 二:解压修改配置。 tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /opt cd /opt mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop-1.4.7修改环境变量 vi /etc/profile#SQOOP_HOME export SQOOP_…

成功经营社区店的商业模式与案例分析

随着互联网的发展,线上购物已经成为了人们生活中不可或缺的一部分。然而,实体店依然具有不可替代的优势,特别是在社区环境中。 社区店不仅能够为居民提供便利的购物体验,还能为店主带来稳定的收入。 本人在社区开鲜奶吧已经5年时…

数据结构2月19日

题目&#xff1a;顺序表作业 代码&#xff1a; 功能区&#xff1a; #include <stdio.h>#include <stdlib.h>#include "./d2191.h"SeqList* create_seqList(){SeqList* list (SeqList*)malloc(sizeof(SeqList));if(NULL list){return NULL;}list->p…

罗克韦尔AB的PLC实现ModbusTCP和ModbusRTU协议标签方式通讯

本文是通过IGT-DSER智能网关读写AB罗克韦尔Compact、Control系列PLC的标签数据缓存并转为Modbus从站协议&#xff0c;与上位机通讯的案例。 打开智能网关的参数软件(下载地址)&#xff0c;通过功能->数据转发与平台对接&#xff0c;再选择数据转发与缓存’&#xff0c;进入以…

基于SpringBoot的教师宿舍管理系统设计与实现(源码+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于SpringBoot的教师宿…

PolarDN MISC做题笔记

cat flag 使用01打开flag.png,发现图片尾部有padding的数据。D0 CF 11 E0 A1 B1 1A E1为office2007以前版本的文件头。将其另存为flag.doc,打开发现提示需要密码。&#xff08;可以注意到&#xff1a;D0CF11E0非常类似DOCFILE&#xff09; 使用john的office2john.py 提取hash …

第3部分 原理篇2去中心化数字身份标识符(DID)(2)

3.2.2. DID相关概念 3.2.2.1. 去中心化标识符 (Decentralized identifier&#xff0c;DID) 本聪老师&#xff1a;DID有两个含义&#xff0c;一是Decentralized identity&#xff0c;就是去中心化身份&#xff0c;是广泛意义的DID。另外一个是Decentralized identifier&#xf…

小兴教你做平衡小车-stm32程序开发(新建通用工程)

文章目录 1、准备工作2、拷贝文件2.1 拷贝文件到FWLIB文件夹2.2 拷贝文件到CMSIS文件夹2.3 拷贝文件到USER文件夹 3、keil新建工程4、通用工程下载 参考博客&#xff1a; 零死角玩转stm32初级篇1-从零创建STM32工程模板 1、准备工作 首先呢&#xff0c;我们用压缩软件解压之前…

基于springboot+vue的植物健康系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

2024开年,手机厂商革了自己的命

文&#xff5c;刘俊宏 编&#xff5c;王一粟 2024开年&#xff0c;AI终端的号角已经由手机行业吹响。 OPPO春节期间就没闲着&#xff0c;首席产品官刘作虎在大年三十就迫不及待地宣布&#xff0c;OPPO正式进入AI手机时代。随后在开年后就紧急召开了AI战略发布会&#xff0c;…

Django学习笔记-创建第一个django项目

1.创建一个虚拟环境的python项目 2.点击解释器设置 3.安装django包 4.终端选择Command Prompt 5.创建django项目运行django-admin startproject demo01(自命名) 6.修改连接数据库为mysql 7.修改语言(中国汉语)和时区(亚洲上海)USE_TZ改为False,否则时区不生效 8.修改TEMPLA…

Vue | (四)使用Vue脚手架(上) | 尚硅谷Vue2.0+Vue3.0全套教程

文章目录 &#x1f4da;初始化脚手架&#x1f407;创建初体验&#x1f407;分析脚手架结构&#x1f407;关于render&#x1f407;查看默认配置 &#x1f4da;ref与props&#x1f407;ref属性&#x1f407;props配置项 &#x1f4da;混入&#x1f4da;插件&#x1f4da;scoped样…

关于设备连接有人云的使用及modbus rtu协议,服务器端TCP调试设置

有人云调试 调试过程问题1. 关于modbus rtu协议,实质上有三种modbus基本原理modbus 格式2. 关于modbus crc16通信校验3. 关于在ubuntu阿里云服务器端,监听网络数据之调试mNetAssist4. 使用有人FAE传给的设置软件问题???之前的一个项目,再拿出来回顾下。 调试过程 先 要在有…

寄存器的功能和地址详细信息

基于Modbus协议中各种寄存器的功能和地址详细信息&#xff0c;这里再进一步阐述它们如何对应于DI&#xff08;数字输入&#xff09;、DO&#xff08;数字输出&#xff09;、AI&#xff08;模拟输入&#xff09;、和AO&#xff08;模拟输出&#xff09;类型&#xff1a; 离散输入…

golang 监听ip数据包(golang纯享版)

golang 监听ip数据包(golang纯享版) 【注】本机编译运行平台为linux&#xff0c;如需测试代码请移至linux平台进行代码测试 本文以ip4 作为案例进行包抓取示范&#xff0c;ip6抓取与ip4方式异曲同工&#xff0c;可自行举一反三得出 第一步&#xff0c;通过wireshark抓包拿到…