Nginx03-使用

news2024/12/29 19:18:23

零、文章目录

Nginx03-使用

1、Nginx服务器启停命令

  • 对于 Nginx 的启停在 Linux 系统中也有很多种方式,我们介绍两种方式:
    • Nginx信号控制
    • Nginx命令行控制
(1)Nginx信号控制
  • 查看Nginx 中的 master 和 worker 进程
[root@localhost ~]# ps -ef |grep nginx
root      27103      1  0 12:29 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    27104  27103  0 12:29 ?        00:00:00 nginx: worker process
root      27189   1775  0 12:29 pts/0    00:00:00 grep --color=auto nginx
  • **Nginx的工作方式:**Nginx 后台进程中包含一个 master 进程和多个 worker 进程,master 进程主要用来管理 worker 进程,包含接收外界的信息,并将接收到的信号发送给各个 worker 进程,监控 worker 进程的状态。当 worker 进程出现异常退出后,会自动重新启动新的 worker 进程。而 worker 进程则是专门用来处理用户请求的,各个 worker 进程之间是平等的并且相互独立,处理请求的机会也是一样的。

image-20240925135410534

  • 获取到 master 进程的进程号 PID的两种方式
# 方式1:通过命令打印进程信息
ps -ef | grep nginx

# 方式2:查看文件存储的PID
cat /usr/local/nginx/logs/nginx.pid
  • 信号有哪些
信号作用
TERM/INT立即关闭整个服务
QUIT"优雅"地关闭整个服务
HUP重读配置文件并使用服务对新配置项生效
USR1重新打开日志文件,可以用来进行日志切割
USR2平滑升级到最新版的nginx
WINCH所有子进程不在接收处理新连接,相当于给work进程发送QUIT指令
  • **如何通过信号控制 Nginx 的启停等相关操作:**调用命令为kill -signal PID,signal:即为信号;PID即为获取到的master线程ID
# 命令格式
kill -signal PID

# 格式一:
kill -TERM PID
# 立即关闭当前线程
kill -TERM `cat /usr/local/nginx/logs/nginx.pid`

# 格式一:
kill -INT PID
# 立即关闭当前线程
kill -INT `cat /usr/local/nginx/logs/nginx.pid
  • 案例演示如下
# 发送QUIT信号给master进程,master进程会控制所有的work进程不再接收新的请求,等所有请求处理完后,在把进程都关闭掉。
# 优雅 关闭线程
kill -QUIT PID
# 「优雅」关闭当前线程
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`

# 发送HUP信号给master进程,master进程会把控制旧的work进程不再接收新的请求,等处理完请求后将旧的work进程关闭掉,然后根据nginx的配置文件重新启动新的work进程
# 重启 worker 进程
kill -HUP PID 
# 重启当前 worker 进程
kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

# 发送USR1信号给master进程,告诉Nginx重新开启日志文件
# 重新打开日志文件
kill -USR1 PID
# 重新打开当前 Nginx 的日志文件
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

# 发送USR2信号给master进程,告诉master进程要平滑升级,这个时候,会重新开启对应的master进程和work进程,整个系统中将会有两个master进程,并且新的master进程的PID会被记录在`/usr/local/nginx/logs/nginx.pid`而之前的旧的master进程PID会被记录在`/usr/local/nginx/logs/nginx.pid.oldbin`文件中,接着再次发送QUIT信号给旧的master进程,让其处理完请求后再进行关闭
# 开启新的进程,但是不删除旧的进程
kill -USR2 PID
# 开启新的进程,但是不删除当前进程
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
# 关闭旧的线程
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

# 发送 WINCH 信号给 master 进程,让 master 进程控制不让所有的 worker 进程在接收新的请求了,请求处理完后关闭 worker 进程。注意 master 进程不会被关闭掉
# 停止 worker 进程,但是不停止 master 进程
kill -WINCH PID 
# 停止当前 worker 进程,但是不停止 master 进程
kill -WINCH `cat /usr/local/nginx/logs/nginx.pid`

1586368250085

(2)Nginx命令行控制
  • **查看命令参数:**此方式是通过可执行文件 nginx来进行控制,通过 nginx -h 来查看都有哪些参数可以用。
[root@localhost ~]# /usr/local/nginx/sbin/nginx -h
nginx version: nginx/1.26.2
Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]
             [-e filename] [-c filename] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /usr/local/nginx/)
  -e filename   : set error log file (default: /usr/local/nginx/logs/error.log)
  -c filename   : set configuration file (default: /usr/local/nginx/conf/nginx.conf)
  -g directives : set global directives out of configuration file
  • 命令参数说明

    • **-?和-h:**显示帮助信息

    • **-v:**打印版本号信息并退出

    • **-V:**打印版本号信息和配置信息并退出

    • **-t:**测试nginx的配置文件语法是否正确并退出

    • **-T:**测试nginx的配置文件语法是否正确并列出用到的配置文件信息然后退出

    • **-q:**在配置测试期间禁止显示非错误消息

    • **-s:**signal信号,后面可以跟 :

      • stop[快速关闭,类似于TERM/INT信号的作用]

      • quit[优雅的关闭,类似于QUIT信号的作用]

      • reopen[重新打开日志文件类似于USR1信号的作用]

      • reload[类似于HUP信号的作用]

    • **-p:**prefix,指定Nginx的prefix路径,(默认为: /usr/local/nginx/)

    • **-c:**filename,指定Nginx的配置文件路径,(默认为: conf/nginx.conf)

    • **-g:**用来补充Nginx配置文件,向Nginx服务指定启动时应用全局的配置

  • 案例演示

# 查看版本
[root@localhost ~]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.26.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --modules-path=/usr/local/nginx/modules --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log --pid-path=/usr/local/nginx/logs/nginx.pid --lock-path=/usr/local/nginx/logs/nginx.lock

# 测试 Nginx 的配置文件语法是否正确
[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

# 指定 Nginx 的默认安装路径
[root@localhost ~]# /usr/local/nginx/sbin/nginx -p /usr/local/nginx/

# 指定 Nginx 的配置文件路径
[root@localhost ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

# 快速关闭Nginx
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s stop
# 重新加载配置文件
[root@localhost ~]# /usr/local/nginx/sbin/nginx
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

# 重新指定配置参数,一般都是修改配置文件,使用命令指定比较少,但是也可以
# pid配置文件存放地址修改之后,stop会报错,因为stop使用的还是原来的pid文件中的id,所以只能使用信号关闭
[root@localhost ~]# /usr/local/nginx/sbin/nginx -g "pid logs/abc.pid"

2、Nginx版本升级

(1)概述
  • **强行切换:**如果想对Nginx 的版本进行更新,或者要应用一些新的模块,最简单的做法就是停止当前的 Nginx 服务,然后开启新的 Nginx 服务。但是这样会导致在一段时间内,用户是无法访问服务器。
  • **平滑升级:**为了解决这个问题,我们就需要用到 Nginx 服务器提供的平滑升级功能。这个也是 Nginx 的一大特点,使用这种方式,就可以使 Nginx 在 7 * 24 小时不间断的提供服务了。
  • **需求案例:**Nginx 的版本最开始使用的是 Nginx-1.14.2,由于服务升级,需要将 Nginx 的版本升级到 Nginx-1.26.2,要求 Nginx 不能中断提供服务。
  • 两种解决方案
    • 使用 Nginx 服务信号完成 Nginx 的升级。
    • 使用 Nginx 安装目录的 make 命令完成升级。
(2)环境准备
  • 使用 Nginx 源码安装的方式将 1.14.2 版本安装成功并正确访问。
# 创建指定目录
mkdir -p /opt/nginx/core

# 切换到目录
cd /opt/nginx/core

# 下载nginx
wget http://nginx.org/download/nginx-1.14.2.tar.gz

# 解压
tar -xzf nginx-1.14.2.tar.gz

# 进入解压出的目录
cd nginx-1.14.2/

# 配置安装的路径
./configure --prefix=/usr/local/nginx

# 编译安装
make && make install

# 执行 nginx 文件
/usr/local/nginx/sbin/nginx
  • 将 Nginx 1.26.2 版本进行参数配置和编译,不需要进行安装。
# 切换到目录
cd /opt/nginx/core

# 下载nginx
wget http://nginx.org/download/nginx-1.26.2.tar.gz

# 解压
tar -xzf nginx-1.26.2.tar.gz

# 进入解压出的目录
cd nginx-1.26.2/

# 执行配置文件
./configure

# 编译安装
make
(3)服务信号进行升级
  • 第一步:将 1.14.2 版本的 sbin 目录下的 nginx 进行备份
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginxold
  • 第二步:将 Nginx 1.26.2 安装目录编译后的 objs 目录下的 nginx 文件,拷贝到原来 /usr/local/nginx/sbin 目录下
cp /opt/nginx/core/nginx-1.26.2/objs/nginx /usr/local/nginx/sbin
  • 第三步:发送信号 USR2 给 Nginx 的 1.14.2 版本对应的 master 进程
[root@localhost ~]# ps -ef|grep nginx
root      70727      1  0 15:47 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    70728  70727  0 15:47 ?        00:00:00 nginx: worker process
root     107883   1775  0 16:26 pts/0    00:00:00 grep --color=auto nginx
[root@localhost ~]# kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
[root@localhost ~]# ps -ef|grep nginx
root      70727      1  0 15:47 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    70728  70727  0 15:47 ?        00:00:00 nginx: worker process
root     108661  70727  0 16:27 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody   108662 108661  0 16:27 ?        00:00:00 nginx: worker process
root     108735   1775  0 16:27 pts/0    00:00:00 grep --color=auto nginx
[root@localhost ~]# cd /usr/local/nginx/logs/
[root@localhost logs]# ll
总用量 12
-rw-r--r-- 1 root root  0 925 15:47 access.log
-rw-r--r-- 1 root root 73 925 16:27 error.log
-rw-r--r-- 1 root root  7 925 16:27 nginx.pid
-rw-r--r-- 1 root root  6 925 15:47 nginx.pid.oldbin  #生成一个文件,存放的是1.14.2对应的PID
  • 第四步:发送信号 QUIT 给 Nginx 的 1.14.2 版本对应的 master 进程,nginx.pid.oldbin也删除了,平滑升级完成
[root@localhost logs]# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
[root@localhost logs]# ps -ef|grep nginx
root     108661      1  0 16:27 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody   108662 108661  0 16:27 ?        00:00:00 nginx: worker process
root     113029   1775  0 16:32 pts/0    00:00:00 grep --color=auto nginx
[root@localhost logs]# ll
总用量 8
-rw-r--r-- 1 root root  0 925 15:47 access.log
-rw-r--r-- 1 root root 73 925 16:27 error.log
-rw-r--r-- 1 root root  7 925 16:27 nginx.pid
[root@localhost logs]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.26.2
(4)make命令完成升级
  • 第一步:将 1.14.2 版本的 sbin 目录下的 nginx 进行备份
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginxold
  • 第二步:将 Nginx 1.26.2 安装目录编译后的 objs 目录下的 nginx 文件,拷贝到原来 /usr/local/nginx/sbin 目录下
cp /opt/nginx/core/nginx-1.26.2/objs/nginx /usr/local/nginx/sbin
  • 第三步:进入到安装目录,执行 make upgrade
[root@localhost ~]# cd /opt/nginx/core/nginx-1.26.2/
[root@localhost nginx-1.26.2]# make upgrade
/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
  • 第四步:查看是否更新成功
[root@localhost nginx-1.26.2]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.26.2

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

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

相关文章

计算机进制之间的关系

计算机中常见的进制 十进制、二进制、十六进制、八进制之间对照表 进制之间的转换 通过上面的十进制对应二进制进位的表示: 当二进制产生增加位数时,相对应十进制数为2、4、8、16、32、64、128,也被称为二进制的位权,根据规律可知…

linux中缓存,在kafka上应用总结

linux中的缓存 页缓存 pagecatch(读缓存用于提供快速读)块缓存(用于提供其他设备快速写)当对读缓存读的时候,修改了读的数据,页缓存就会被标记为脏数据,等到写的时候它会向块缓存同步数据&…

关于7zip解压缩的下载和使用

我们有的时候下载软件,后缀是 ".exe" 或者 “.zip”,".7z"等,".exe"文件还好,打开就能进行下载,但是“.zip”,".7z“等就需要用解压缩软件进行解压了。 今天介绍的解…

No.11 笔记 | PHP学习指南:从函数到面向对象概览

一、PHP函数:代码复用的艺术 1. 函数的本质与魅力 函数是PHP的核心力量,分为内置函数和自定义函数函数名应当简洁明了,以字母或下划线开头 2. 函数的构成要素 function 关键字:函数的开始标志函数名:您的函数的独特…

【Git原理与使用】远程操作标签管理

远程操作&&标签管理 1.理解分布式版本控制系统2.新建远程仓库3.克隆远程仓库4.向远程仓库推送5.拉取远程仓库6.配置 Git7.配置命令别名8.标签管理8.1创建标签8.2操作标签 点赞👍👍收藏🌟🌟关注💖💖…

把当抠门程序员,遇到了免费AI大模型

这篇想和大家分享一下&#xff0c;一个抠门的程序员和一个免费的AI大模型的故事。 “抠门程序员<–>免费大模型”&#xff0c;让我看看&#xff0c;能不能擦出马内的火花。 故事的开始 不知道有没有程序员和我一样&#xff0c;付费的东西&#xff0c;都会省着点开。什…

远程访问服务是什么?如何通过节点小宝远程访问办公室电脑?

在家办公若能各安其位、高效完成任务&#xff0c;实为美事。然而&#xff0c;现实往往不尽如人意&#xff0c;偶尔需用到办公室电脑上的资料&#xff0c;这时便需依赖远程访问服务的助力。那么&#xff0c;远程访问服务究竟是何方神圣&#xff1f;又该如何借助节点小宝实现对办…

解锁空间距离计算的多种方式-含前端、空间数据库、后端

目录 前言 一、空间数据库求解 1、PostGIS实现 二、GIS前端组件求解 1、Leaflet.js距离测算 2、Turf.js前端计算 三、后台距离计算生成 1、欧式距离 2、Haversice球面距离 3、GeoTools距离计算 4、Gdal距离生成 5、geodesy距离计算 四、成果与生成对比 1、Java不…

CSRF | POST 型 CSRF 漏洞攻击

关注这个漏洞的其他相关笔记&#xff1a;CSRF 漏洞 - 学习手册-CSDN博客 0x01&#xff1a;POST 型 CSRF 漏洞攻击 —— 理论篇 POST 型 CSRF 漏洞是指攻击者通过构造恶意的 HTTP POST 请求&#xff0c;利用用户的登录状态&#xff0c;在用户不知情的情况下&#xff0c;诱使浏览…

Mythical Beings:Web3游戏如何平衡创造内容、关注度与实现盈利的不可能三角

Web3游戏自其诞生以来&#xff0c;以去中心化和独特的代币经济体系迅速引起关注。然而&#xff0c;如何在创造内容、吸引用户和实现盈利之间达到平衡&#xff0c;始终是Web3游戏面临的核心挑战。Mythical Beings作为一款Web3卡牌游戏&#xff0c;通过创新设计和独特机制&#x…

java集合框架都有哪些

Java集合框架&#xff08;Java Collections Framework&#xff09;是Java提供的一套设计良好的支持对一组对象进行操作的接口和类。这些接口和类定义了如何添加、删除、遍历和搜索集合中的元素。Java集合框架主要包括以下几个部分&#xff1a; 接口&#xff1a; Collection&…

昆虫分类与检测系统源码分享

昆虫分类与检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

成都睿明智科技有限公司抖音电商服务佼佼者

在当今这个数字化浪潮汹涌的时代&#xff0c;抖音电商以其独特的魅力迅速崛起&#xff0c;成为众多商家竞相追逐的新蓝海。而在这场电商盛宴中&#xff0c;专业的服务商如同灯塔一般&#xff0c;为迷茫的商家指引方向。今天&#xff0c;我们就来深入探讨一家备受瞩目的服务商—…

Qt-QSpacerItem布局相关控件(45)

目录 描述 属性 使用 控件小结 描述 使⽤布局管理器的时候,可能需要在控件之间,添加⼀段空⽩.就可以使⽤ QSpacerItem 来表⽰ 属性 width宽度height⾼度hData⽔平⽅向的 sizePolicy • QSizePolicy::Ignored : 忽略控件的尺⼨&#xff0c;不对布局产⽣影响。 • QSizePol…

业务封装与映射 -- FlexE

什么是FlexE FlexE&#xff08;灵活以太网技术&#xff0c;Flexible Ethernet&#xff09;是由OIF 定义的灵活以太客户端接口标准&#xff0c; 是承载网实现业务隔离和网络分片的一种接口技术&#xff0c;支持路由器和光传输设备之间的灵活以太网连接&#xff0c;实现接口侧业务…

牛顿法、L-M算法

在进行解方程的时候&#xff0c;如下所示方程 其中&#xff0c;相应的k11、k12、k21、k22都是已知常量&#xff0c;可以见到其是一个非线性方程。关于非线程方程的求解&#xff0c;我看到网上有两种方法&#xff0c;牛顿法与L-M算法。 1.牛顿法 之前貌似学过&#xff0c;学过…

基于SSM的服装自销电商平台设计

文未可获取一份本项目的java源码和数据库参考。 一、选题背景 在当今这个信息时代&#xff0c;“网上购物”这种购物方式已经为越来越多的人所接受&#xff0c;越来越多的人选择在网络上购买衣服&#xff0c;方便快捷且实惠。在这种背景之下&#xff0c;一个安全稳定并且强大…

Windows下的python安装教程_2024年10月最新最详细的安装指南

文章目录 前言一、下载python二、安装python三、验证环境四、配置环境变量&#xff08;可选&#xff09;总结 前言 Python 是一种广泛使用的高级编程语言&#xff0c;以其简洁易读的语法和强大的库支持而著称。无论你是初学者还是经验丰富的开发者&#xff0c;安装 Python 都是…

【Canvas与标牌】盾形银底红带Best Quality Premium标牌

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>BestQulityPremium金属牌重制版Draft2</title><style type&…

【YOLOv8实时产品缺陷检测】

YOLOv8应用于产品缺陷检测实例 项目概况项目实现YOLOv8安装及模型训练关键代码展示动态效果展示 项目概况 本项目是应用YOLOv8框架实现训练自定义模型实现单一零件的缺陷检测&#xff0c;软件界面由PyQt5实现。 功能已正式使用&#xff0c;识别效果达到预期。 项目实现 项目…