当前位置: 首页 > article >正文

Nginx03-使用

零、文章目录

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.kler.cn/news/336574.html

相关文章:

  • Midjourney中文版:解锁AI艺术的无限可能!
  • 物联网开发者必读:从HTTP到MQTT,八大协议全解码!
  • 【STM32 HAL库】MPU6050 DMP库移植 与 自检失败的处理
  • 红队apt--文本宏病毒攻击思路整理
  • 自用Proteus(8.15)常用元器件图示和功能介绍(持续更新...)
  • RESTful API介绍
  • QT-数据类型容器类窗口控件模态框
  • Github 2024-10-04 Java开源项目日报Top8
  • (C语言贪吃蛇)4.贪吃蛇地图优化及算法说明
  • 【FPGA开发】Xilinx FPGA差分输入时钟的使用方法
  • 深度学习-----------------机器翻译与数据集
  • 在QT中将Widget提升为自定义的Widget后,无法设置Widget的背景颜色问题解决方法
  • (五)Protues仿真STM32单片机串口数据流收发
  • 萤火php端: 查询数据的时候报错: “message“: “Undefined index: pay_status“,
  • 【408计算机考研课程】数据结构-数据结构在学什么?
  • 使用html写一个能发起请求的登录界面
  • 智能平衡移动机器人-平台硬件电路
  • 旅游平台|智慧旅游平台|基于java的智慧旅游平台设计与实现(源码+数据库+文档)
  • 自动驾驶系列—智能驾驶中的“换挡革命”:线控换挡技术详解
  • 毕业设计——医院信息化系统原型设计