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

news2024/9/20 0:51:45

目录

一、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.coloradmin.cn/o/1465562.html

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

相关文章

使用代理IP技术实现爬虫同步获取和保存

概述 在网络爬虫中,使用代理IP技术可以有效地提高爬取数据的效率和稳定性。本文将介绍如何在爬虫中同步获取和保存数据,并结合代理IP技术,以提高爬取效率。 正文 代理IP技术是一种常用的网络爬虫技术,通过代理服务器转发请求&a…

Google发布开放的模型Gemma

今天,Google 发布了一系列最新的开放式大型语言模型 —— Gemma!Google 正在加强其对开源人工智能的支持,我们也非常有幸能够帮助全力支持这次发布,并与 Hugging Face 生态完美集成。 Gemma 提供两种规模的模型: 7B …

使用向量数据库pinecone构建应用05:人脸相似度查询Facial Similarity Search

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

深入探索Linux:ACL权限、特殊位与隐藏属性的奥秘

前言: 在Linux系统中,文件和目录的权限管理是一项至关重要的任务。它决定了哪些用户或用户组可以对文件或目录执行读、写或执行等操作。传统的Linux权限模型基于用户、组和其他的概念,但随着时间的推移,这种模型在某些情况下显得…

SQL库操作

1、创建数据库 概念 创建数据库:根据项目需求创建一个存储数据的仓库 使用create database 数据库名字创建 数据库层面可以指定字符集:charset/character set 数据库层面可以指定校对集:collate 创建数据库会在磁盘指定存放处产生一个文件夹 创建语法 create …

springmvc+mybatis+springboot航空飞机订票售票系统_f48cp

互联网发展的越来越快了,在当下社会节点,人们也开始越来越依赖互联网。通过互联网信息和数据,极大地满足用户要求[5]。飞机订票系统使用了B/S模式,并且不需要安装第三方插件,他们甚至能直接在电脑上随机随地实现飞机订…

Go 中的 init 如何用?它的常见应用场景有哪些呢?

嗨,大家好!我是波罗学。本文是系列文章 Go 技巧第十六篇,系列文章查看:Go 语言技巧。 Go 中有一个特别的 init() 函数,它主要用于包的初始化。init() 函数在包被引入后会被自动执行。如果在 main 包中,它也…

JavaGuide-SQL在mysql中的执行过程

SQL在mysql中的执行过程 原文连接 SQL在mysql中的执行过程 基础架构概览 我们先总结基本组件 连接器: 身份认证 权限相关的,我们连接的时候会验证查询缓存: 8.0之后移除,执行查询的时候,会先查缓存分析器: 分析你的sql语句,包括词法分析 语法分析优化器: 按照mysql认为最…

LED智能互联办公室照明恒流调光IC芯片无频闪H5114

调光高辉度65536级/高精度3% LED降压型恒流驱动器H5114 产品描述 H5114是一款外围电路简单的多功能平 均电流型LED恒流驱动器,适用于5-90V电压范围的非隔离式大功率恒流LED驱动领域。 芯片采用了平均电流模式控制,输出电流精度在3%&#xff…

http相关概念以及apache的功能(最详细讲解!!!!)

概念 互联网:是网络的网络,是所有类型网络的母集 因特网:世界上最大的互联网网络 万维网:www (不是网络,而是数据库)是网页与网页之间的跳转关系 URL:万维网使用统一资源定位符,…

GEE入门篇|遥感专业术语(实践操作1):搜索及查看图像集合信息

Earth Engine 的搜索栏可用于查找影像和定位重要内容有关 Earth Engine 中数据集的信息,让我们使用位于搜索栏上方的Earth Engine代码,用于查找有关 Landsat 7 集合 2 的信息原始场景。首先,在搜索栏中输入“Landsat 7 collection 2”&#x…

【Power Apps】实现一个简单的可编辑列表

简单来说,我们这次是要实现一个可以直接在列表上增加、修改、删除数据的功能。 大概就像这样。 之前我们都是拿列表做一个数据展示的功能,真要增加、修改、删除数据是在另一张表单上做的,我们这回要去掉另一个表单,直接在列表上做…

RabbitMQ学习整理————基于RabbitMQ实现RPC

基于RabbitMQ实现RPC 前言什么是RPCRabbitMQ如何实现RPCRPC简单示例通过Spring AMQP实现RPC 前言 这边参考了RabbitMQ的官网,想整理一篇关于RabbitMQ实现RPC调用的博客,打算把两种实现RPC调用的都整理一下,一个是使用官方提供的一个Java cli…

适用于生物行业的样本管理系统

在生物样本管理系统的应用中,我们首先需要了解生物样本的特点和要求。生物样本具有多样性和易变性,需要被妥善保存和跟踪,以确保其质量和可用性。 因此,一个有效的生物样本管理系统需要具备以下特点: 全面性&#xff1…

测试用例设计方法:招式组合,因果判定出世

1 引言 上篇讲了等价类划分和边界值分析法,而这两种方法只考虑了单个的输入条件,并未考虑输入条件的各种组合、输入条件之间的相互制约关系的场景。基于此短板,因果图法和判定表法应运而生。 2 因果图法 2.1 概念及原理 2.1.1 定义 一种…

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

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

2024/02/23

使用消息队列完成两个进程间相互通信 A.c #include<myhead.h> struct msgbuf {long mtype;char mtext[1024]; }; //定义表示正文内容大小的宏 #define MSGSIZE sizeof(struct msgbuf)-sizeof(long)int main(int argc, const char *argv[]) {//创建一个key值key_t key;ke…

快速学习安全框架 Springsecurity最新版(6.2)--用户授权模块

简介 上一节Springsecurity 用户认证 Springsecurity 拥有强大的认证和授权功能并且非常灵活&#xff0c;,一来说我们都i有以下需求 可以帮助应用程序实现以下两种常见的授权需求&#xff1a; 用户-权限-资源&#xff1a;例如张三的权限是添加用户、查看用户列表&#xff0c;李…

springboot214基于springboot的多媒体素材库的开发与应用

多媒体素材库的设计与实现 摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首先&#xff0c;根据收集到的用户需求分析&#xff0c;对设计系统有一个初步的认识与了解&#xff0c;确定多媒体素材库的总体功…

CentOS使用Docker搭建Halo网站并实现无公网ip远程访问

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…