分布式 - 服务器Nginx:基础系列之Nginx简介 | 下载安装 | 启动和停止服务

文章目录

    • 01. Nginx 简介
    • 02. 正向代理和反向代理
    • 03. Nginx 和 Apache、Tomcat 之间的不同点
    • 04. Nginx 的优点
    • 05. Nginx 常用的功能特性
    • 06. Nginx 下载
    • 07. Nginx 安装
      • 1. 源码安装前的环境准备
      • 2. Nginx 源码简单安装方式
      • 3. Nginx yum 安装方式
      • 4. Nginx 源码复杂安装方式
    • 08. Nginx 目录结构分析
    • 09. Nginx 服务器启动和停止命令
      • 1. 信号控制 Nginx 服务器的启动和停止
      • 2. 命令行控制 Nginx 服务器的启动和停止
    • 10. Nginx 服务器版本的升级和新增模块
      • 1. 环境准备
      • 2. 使用 Nginx 服务信号进行升级
      • 3. 使用 Nginx 安装目录的make命令完成升级

01. Nginx 简介

Nginx是一个高性能的Web服务器,同时也是一个反向代理服务器。它最初是为了解决C10K问题而开发的,即如何让一个服务器同时处理成千上万个并发连接。Nginx采用了事件驱动的异步非阻塞处理方式,能够高效地处理大量并发连接,因此被广泛应用于高并发的Web应用场景中。

此外,Nginx还可以作为POP3/SMTP/IMAP代理服务器,用于代理邮件服务器的请求和响应。这使得Nginx可以在一台服务器上同时运行多个服务,提高了服务器的利用率。

02. 正向代理和反向代理

正向代理和反向代理是两种不同的代理模式,它们的作用和实现方式不同。

正向代理(Forward Proxy)是客户端通过代理服务器访问互联网资源的方式。在这种模式下,客户端向代理服务器发送请求,代理服务器再将请求转发给互联网上的服务器,最后将响应结果返回给客户端。正向代理的作用是隐藏客户端的真实IP地址,保护客户端的隐私,同时可以加速访问速度,缓存常用资源等。

反向代理(Reverse Proxy)是服务器通过代理服务器向客户端提供服务的方式。在这种模式下,客户端向代理服务器发送请求,代理服务器根据请求的内容将请求转发给后端的服务器集群中的某一台服务器,最后将响应结果返回给客户端。反向代理的作用是隐藏后端服务器的真实IP地址,提高系统的安全性,同时可以实现负载均衡、缓存加速、SSL/TLS加密等功能。

总的来说,正向代理是客户端通过代理服务器访问互联网资源,反向代理是服务器通过代理服务器向客户端提供服务。两者的作用和实现方式不同,但都可以提高系统的安全性和性能。

03. Nginx 和 Apache、Tomcat 之间的不同点

Nginx、Apache和Tomcat都是常见的Web服务器,它们之间有以下不同点:

① 设计理念不同:Nginx采用事件驱动的异步非阻塞处理方式,能够高效地处理大量并发连接;Apache采用多进程或多线程的方式处理请求,适合处理静态资源;Tomcat则是一个Java Servlet容器,主要用于处理动态Web应用。

② 功能不同:Nginx主要用于反向代理、负载均衡、静态文件服务、SSL/TLS加密等;Apache除了支持反向代理和负载均衡外,还支持动态内容生成、模块化扩展等;Tomcat则是一个完整的Java Web应用服务器,支持Java Servlet和JavaServer Pages(JSP)等技术。

③ 配置方式不同:Nginx的配置文件采用类似于编程语言的语法,配置简单灵活;Apache的配置文件采用基于XML的语法,配置相对复杂;Tomcat的配置文件采用基于XML的语法,配置相对简单。

④ 性能不同:Nginx在高并发的Web应用场景中表现出色,能够高效地处理大量并发连接;Apache在处理静态资源时表现出色,但在高并发场景下性能较差;Tomcat在处理动态Web应用时表现出色,但在高并发场景下性能也较差。

综上所述,Nginx、Apache和Tomcat都有各自的优缺点,选择哪种Web服务器取决于具体的应用场景和需求。

04. Nginx 的优点

Nginx具有以下几个主要的优点:

① 高性能:Nginx采用事件驱动的异步非阻塞处理方式,能够高效地处理大量并发连接。它的设计目标是解决C10K问题,能够处理成千上万个并发连接,适用于高并发的Web应用场景。

② 资源消耗低:相比传统的多线程模型,Nginx的进程和线程模型更轻量,占用的系统资源更少。它能够以较少的内存和CPU资源处理更多的并发请求,提高服务器的利用率。

③ 高可靠性:Nginx具有良好的稳定性和可靠性。它能够处理异常情况,如网络故障、后端服务器宕机等,并提供健壮的错误处理机制。此外,Nginx还支持热部署,可以在不中断服务的情况下进行配置和软件更新。

④ 灵活的配置和扩展性:Nginx的配置文件采用类似于编程语言的语法,配置简单灵活。它支持模块化的架构,可以通过加载不同的模块来扩展功能,如反向代理、负载均衡、缓存加速、SSL/TLS加密等。

⑤ 支持丰富的功能:除了作为Web服务器和反向代理服务器,Nginx还具备其他功能,如负载均衡、动态HTTP内容缓存、虚拟主机配置、URL重写、访问控制等。这些功能使得Nginx适用于各种复杂的应用场景。

综上所述,Nginx以其高性能、低资源消耗、高可靠性、灵活的配置和丰富的功能而备受青睐,成为许多大型网站和应用的首选Web服务器和反向代理服务器。

05. Nginx 常用的功能特性

Nginx具有多种功能特性,以下是一些常用的功能:

① 静态文件服务:Nginx可以快速、高效地提供静态文件的访问,如HTML、CSS、JavaScript、图片等。它可以通过配置简单的静态文件目录,直接响应客户端的请求,减轻后端服务器的负载。

② 反向代理:Nginx可以作为反向代理服务器,将客户端的请求转发给后端的多个服务器,实现负载均衡和高可用性。它可以根据配置的规则将请求分发到不同的后端服务器,提高系统的性能和可靠性。

③ 负载均衡:Nginx支持多种负载均衡算法,如轮询、IP哈希、最少连接等。通过将请求分发到多个后端服务器,Nginx可以平衡服务器的负载,提高系统的性能和可扩展性。

④ 动态HTTP内容缓存:Nginx可以缓存动态生成的HTTP内容,减少后端服务器的负载和响应时间。它可以根据配置的规则缓存特定的URL或响应,提高系统的性能和响应速度。

⑤ SSL/TLS加密支持:Nginx可以提供安全的HTTPS连接,支持SSL/TLS协议,保护数据的传输安全。它可以配置和管理SSL证书,实现加密通信和安全认证。

⑥ 虚拟主机配置:Nginx支持虚拟主机的配置,可以在一台服务器上托管多个域名或网站。通过配置不同的虚拟主机,Nginx可以根据请求的域名将请求分发到不同的网站或应用程序。

⑦ URL重写和重定向:Nginx可以通过配置URL重写规则,实现URL的重写和重定向。它可以将请求的URL进行修改,实现友好的URL结构和搜索引擎优化。

⑧ 访问控制和安全性:Nginx支持基于IP地址、用户代理、请求方法等进行访问控制,可以限制特定的客户端或请求。它还支持防止恶意请求、DDoS攻击等安全性功能。

除了上述功能,Nginx还支持HTTP/2协议、WebSocket协议、gzip压缩、日志记录、HTTP身份验证等。这些功能使得Nginx成为一个强大而灵活的Web服务器和反向代理服务器。

06. Nginx 下载

① Nginx的官方网站为:http://nginx.org

② Nginx的官方下载网站为:http://nginx.org/en/download.html

③ Nginx源码获取:http://nginx.org/download/

07. Nginx 安装

Nginx的安装方式有两种分别是:

  • 通过Nginx源码简单安装 (1)
  • 通过yum安装 (2)
  • 通过Nginx源码复杂安装 (3)

1. 源码安装前的环境准备

① 安装 GCC

Nginx是使用C语言编写的程序,因此想要运行Nginx就需要安装一个编译工具。GCC就是一个开源的编译器集合,用于处理各种各样的语言,其中就包含了C语言。

# 安装
[root@192 ~]# yum install -y gcc
# 查看是否安装成功
[root@192 ~]# gcc --version

② 安装 PCRE

Nginx在编译过程中需要使用到PCRE库(perl Compatible Regular Expressoin 兼容正则表达式库),因为在Nginx的Rewrite模块和http核心模块都会使用到PCRE正则表达式语法。

# 安装
[root@192 ~]# yum install -y pcre pcre-devel
# 查看是否安装成功
[root@192 ~]# rpm -qa pcre pcre-devel

③ 安装 zlib

zlib库提供了开发人员的压缩算法,在Nginx的各个模块中需要使用gzip压缩,所以我们也需要提前安装其库及源代码zlib和zlib-devel

# 安装
[root@192 ~]# yum install -y zlib zlib-devel
# 查看是否安装成功
[root@192 ~]# rpm -qa zlib zlib-devel

④ OpenSSL

OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包进行安全通信,并且避免被窃听。

SSL:Secure Sockets Layer安全套接协议的缩写,可以在Internet上提供秘密性传输,其目标是保证两个应用间通信的保密性和可靠性。在Nginx中,如果服务器需要提供安全网页时就需要用到OpenSSL库,所以我们需要对OpenSSL的库文件及它的开发安装包进行一个安装。

# 安装
[root@192 ~]# yum install -y openssl openssl-devel
# 查看是否安装成功
[root@192 ~]# rpm -qa openssl openssl-devel

⑤ 上述命令,一个个来的话比较麻烦,我们也可以通过一条命令来进行安装

[root@192 ~]# yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

2. Nginx 源码简单安装方式

① 进入官网查找需要下载版本的链接地址,然后使用wget命令进行下载

[root@192 ~]# wget http://nginx.org/download/nginx-1.16.1.tar.gz

② 将下载的资源进行包管理,将下载的资源放在目录nginx/core目录下

[root@192 ~]# mkdir -p nginx/core
[root@192 ~]# mv nginx-1.16.1.tar.gz nginx/core
[root@192 ~]# cd nginx/core

③ 解压缩

[root@192 core]# tar -xzf nginx-1.16.1.tar.gz
[root@192 core]# ls
nginx-1.16.1  nginx-1.16.1.tar.gz

④ 进入资源文件中,发现 configure

[root@192 core]# cd nginx-1.16.1
[root@192 nginx-1.16.1]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[root@192 nginx-1.16.1]# ./configure

在这里插入图片描述

⑤ 编译和安装

[root@192 nginx-1.16.1]# make && make install

⑥ 查看nginx的安装目录:

[root@192 nginx-1.16.1]# cd /usr/local/nginx/
[root@192 nginx]# ll
drwx------. 2 nobody root    6 412 07:23 client_body_temp
drwxr-xr-x. 2 root   root 4096 86 16:43 conf
drwx------. 2 nobody root    6 412 07:23 fastcgi_temp
drwxr-xr-x. 2 root   root   40 412 07:19 html
drwxr-xr-x. 2 root   root   58 828 22:00 logs
drwx------. 2 nobody root    6 412 07:23 proxy_temp
drwxr-xr-x. 2 root   root   36 828 22:18 sbin
drwx------. 2 nobody root    6 412 07:23 scgi_temp
drwx------. 2 nobody root    6 412 07:23 uwsgi_temp
[root@192 nginx]#

⑦ 启动 nginx:

[root@192 nginx]# cd sbin
[root@192 sbin]# ll
-rwxr-xr-x  1 root root 3825520 828 22:18 nginx
-rwxr-xr-x. 1 root root 3892016 412 07:20 nginx.old
[root@192 sbin]# ./nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

⑧ 可以看到启动报错了,因为80端口占用,因为我之前安装并启动过nginx

# 查找占用80端口的进程
[root@192 sbin]# lsof -i :80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   1075   root    6u  IPv4  29234      0t0  TCP *:http (LISTEN)
nginx   1078 nobody    6u  IPv4  29234      0t0  TCP *:http (LISTEN)
# 停止占用80端口的进程
[root@192 sbin]# kill -9 1075
[root@192 sbin]# sudo lsof -i :80

⑨ 重新启动 nginx:

[root@192 sbin]# ./nginx
[root@192 sbin]# sudo lsof -i :80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   6484   root    6u  IPv4  67768      0t0  TCP *:http (LISTEN)
nginx   6485 nobody    6u  IPv4  67768      0t0  TCP *:http (LISTEN)

查看nginx的欢迎页面是否可以访问:

在这里插入图片描述

3. Nginx yum 安装方式

Nginx官网提供的yum安装教程:http://nginx.org/en/linux_packages.html#RHEL

① 安装 yum-utils

[root@192 sbin]# sudo yum  install -y yum-utils

② 添加 yum 源文件

[root@192 sbin]# vi /etc/yum.repos.d/nginx.repo
[root@192 sbin]# cat /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

③ 使用yum进行安装

[root@192 sbin]# yum install -y nginx

④ 查看nginx的安装位置

[root@192 sbin]# whereis nginx
nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/local/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz

⑥ 启动测试:

[root@192 sbin]# cd /usr/sbin
[root@192 sbin]# ./nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
[root@192 sbin]# sudo lsof -i :80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   6484   root    6u  IPv4  67768      0t0  TCP *:http (LISTEN)
nginx   6485 nobody    6u  IPv4  67768      0t0  TCP *:http (LISTEN)
[root@192 sbin]# kill -9 6484
[root@192 sbin]# kill -9 6485
[root@192 sbin]# sudo lsof -i :80
[root@192 sbin]# ./nginx

在这里插入图片描述

4. Nginx 源码复杂安装方式

① 进入简单安装的安装目录:

[root@192 nginx-1.16.1]# pwd
/root/nginx/core/nginx-1.16.1
[root@192 nginx-1.16.1]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README  src
[root@192 nginx-1.16.1]# ./configure --help

在这里插入图片描述

② 复杂安装方式和简单的安装配置不同的地方在第一步,通过./configure来对编译参数进行设置,需要我们手动来指定,认识一些简单的PATH路径配置:

  • –prefix=PATH:指向Nginx的安装目录,默认值为 /usr/local/nginx

  • –sbin-path=PATH:指向(执行)程序文件(nginx)的路径,默认值为 /sbin/nginx

  • –modules-path=PATH:指向Nginx动态模块安装目录,默认值为 /modules

  • –conf-path=PATH:指向配置文件(nginx.conf)的路径,默认值为 /conf/nginx.conf

  • –error-log-path=PATH:指向错误日志文件的路径,默认值为 /logs/error.log

  • –http-log-path=PATH:指向访问日志文件的路径,默认值为 /logs/access.log

  • –pid-path=PATH:指向Nginx启动后进行ID的文件路径,默认值为 /logs/nginx.pid

  • –lock-path=PATH:指向Nginx锁文件的存放路径,默认值为 /logs/nginx.lock

③ 将之前服务器已经安装的nginx进行卸载,卸载的步骤分为三步骤:

# 需要将nginx的进程关闭
[root@192 nginx-1.16.1]# cd /usr/local/nginx/sbin
[root@192 sbin]# ./nginx -s stop
# 将安装的nginx进行删除
[root@192 sbin]# rm -rf /usr/local/nginx
# 将安装包之前编译的环境清除掉
[root@192 usr]# cd ~/nginx/core/nginx-1.16.1
[root@192 nginx-1.16.1]# make clean
rm -rf Makefile objs

④ 通过./configure来对编译参数进行设置:

[root@192 nginx-1.16.1]# ./configure --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

[root@192 nginx-1.16.1]# make && make install

⑤ 启动测试:

[root@192 nginx]# cd /usr/local/nginx/sbin
[root@192 sbin]# ./nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
[root@192 sbin]# lsof -i :80
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   7638  root    6u  IPv4  75732      0t0  TCP *:http (LISTEN)
nginx   7639 nginx    6u  IPv4  75732      0t0  TCP *:http (LISTEN)
[root@192 sbin]# kill -9 7638
[root@192 sbin]# kill -9 7639
[root@192 sbin]# ./nginx
[root@192 sbin]# ./nginx -V
nginx version: nginx/1.16.1
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

在这里插入图片描述

08. Nginx 目录结构分析

通过yum install -y tree来进行安装tree工具,通过tree我们可以很方面的去查看centos系统上的文件目录结构:

[root@192 sbin]# tree /usr/local/nginx/
/usr/local/nginx/
├── client_body_temp
├── conf
│   ├── fastcgi.conf
│   ├── fastcgi.conf.default
│   ├── fastcgi_params
│   ├── fastcgi_params.default
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types
│   ├── mime.types.default
│   ├── nginx.conf
│   ├── nginx.conf.default
│   ├── scgi_params
│   ├── scgi_params.default
│   ├── uwsgi_params
│   ├── uwsgi_params.default
│   └── win-utf
├── fastcgi_temp
├── html
│   ├── 50x.html
│   └── index.html
├── logs
│   ├── access.log
│   ├── error.log
│   └── nginx.pid
├── proxy_temp
├── sbin
│   └── nginx
├── scgi_temp
└── uwsgi_temp

① conf:nginx所有配置文件目录

cgi (Common Gateway Interface)通用网关【接口】,主要解决的问题是从客户端发送一个请求和数据,服务端获取到请求和数据后可以调用调用CGI【程序】处理及相应结果给客户端的一种标准规范。

  • fastcgi.conf:fastcgi相关配置文件
  • fastcgi.conf.default:fastcgi.conf的备份文件
  • fastcgi_params:fastcgi的参数文件
  • fastcgi_params.default:fastcgi的参数备份文件
  • scgi_params:scgi的参数文件
  • scgi_params.default:scgi的参数备份文件
  • uwsgi_params:uwsgi的参数文件
  • uwsgi_params.default:uwsgi的参数备份文件
  • mime.types:记录的是HTTP协议中的Content-Type的值和文件后缀名的对应关
  • mime.types.default:mime.types的备份文件
  • nginx.conf:这个是Nginx的核心配置文件
  • nginx.conf.default:nginx.conf的备份文件

② html:存放nginx自带的两个静态的html页面

  • 50x.html:访问失败后的失败页面
  • index.html:成功访问的默认首页

③ logs:记录入门的文件,当nginx服务器启动后,这里面会有 access.log error.log 和nginx.pid三个文件出现。

# 查看nginx的错误日志
[root@192 sbin]# tail -f /usr/local/nginx/logs/error.log
2023/08/29 21:21:37 [error] 11898#0: *1 open() "/usr/local/nginx/html/acv" failed (2: No such file or directory), client: 192.168.38.1, server: localhost, request: "GET /acv HTTP/1.1", host: "192.168.38.33"

④ sbin:nginx 的可执行文件所在的目录,可以通过该文件启动、停止和重启 Nginx 服务器。

09. Nginx 服务器启动和停止命令

1. 信号控制 Nginx 服务器的启动和停止

Nginx安装完成后,接下来我们要看下如何启动、重启和停止Nginx的服务。对于Nginx的启停在linux系统中也有很多种方式,主要有两种:Nginx服务的信号控制、Nginx的命令行控制。

① Nginx中的master和worker进程?

Nginx默认采用的是多进程的方式来工作的,Nginx后台进程中包含一个master进程和多个worker进程,master进程主要用来管理worker进程,包含接收外界的信息,并将接收到的信号发送给各个worker进程,监控worker进程的状态,当worker进程出现异常退出后,会自动重新启动新的worker进程。而worker进程则是专门用来处理用户请求的,每个worker进程都是独立的,它们之间没有共享内存,也不会相互干扰。每个worker进程都会处理一部分客户端请求,然后将处理结果返回给客户端。

当将Nginx启动后,我们通过ps -ef | grep nginx命令可以查看到如下内容:

[root@192 sbin]# ./nginx
[root@192 sbin]# ps -ef | grep nginx
root      67744      1  0 21:27 ?        00:00:00 nginx: master process ./nginx
nobody    67745  67744  0 21:27 ?        00:00:00 nginx: worker process
root      67777   2727  0 21:27 pts/0    00:00:00 grep --color=auto nginx

nginx的进程模型,可以通过下图来说明:

在这里插入图片描述

作为管理员,只需要通过给master进程发送信号就可以来控制Nginx,这个时候我们需要有两个前提条件,一个是要操作的master进程,一个是信号。

② 如何获取nginx master进程的PID?

要想操作Nginx的master进程,就需要获取到master进程的进程号ID,可以通过下面两种方式获取:

(1) 通过ps -ef | grep nginx 命令获取:

[root@192 sbin]# ps -ef | grep nginx
root      67744      1  0 21:27 ?        00:00:00 nginx: master process ./nginx
nobody    67745  67744  0 21:27 ?        00:00:00 nginx: worker process
root      67777   2727  0 21:27 pts/0    00:00:00 grep --color=auto nginx

(2) 通过查看 /usr/local/nginx/logs/nginx.pid 文件来获取 nginx 的 master 进程ID:

[root@192 sbin]# cat /usr/local/nginx/logs/nginx.pid
67744

③ 信号有哪些?

Nginx 是一款常用的 Web 服务器和反向代理服务器,它支持多种信号,可以通过发送不同的信号来控制 Nginx 的运行状态。以下是常用的信号 singal:

  • TERM,INT:优雅地关闭 Nginx,等待当前请求处理完成后再关闭。
  • QUIT:立即关闭 Nginx,不等待当前请求处理完成。
  • HUP:重新加载配置文件,会先关闭旧的工作进程,再启动新的工作进程。
  • USR1:重新打开日志文件,可以用于日志切割。
  • USR2:平滑升级 Nginx 可执行文件,可以用于不停机更新 Nginx。
  • WINCH:从容关闭旧的工作进程,用于平滑升级 Nginx。

可以使用 kill 命令向 Nginx 进程发送信号,其中,<nginx_pid> 是 Nginx master进程的 PID,singal为信号:

kill singal <nginx_pid>

(1) 发送TERM信号给master进程,会将Nginx服务优雅关闭:

[root@192 sbin]# ps -ef | grep nginx
root      67744      1  0 21:27 ?        00:00:00 nginx: master process ./nginx
nobody    67745  67744  0 21:27 ?        00:00:00 nginx: worker process
root      68955   2727  0 21:57 pts/0    00:00:00 grep --color=auto nginx
[root@192 sbin]# kill -TERM 67744
[root@192 sbin]# ./nginx
[root@192 sbin]# kill -TERM `cat /usr/local/nginx/logs/nginx.pid`

(2) 发送QUIT信号给master进程,master进程会控制所有的work进程不再接收新的请求,等所有请求处理完后,在把进程都关闭掉。

[root@192 sbin]# ./nginx
[root@192 sbin]# ps -ef | grep nginx
root      69172      1  0 22:01 ?        00:00:00 nginx: master process ./nginx
nobody    69173  69172  0 22:01 ?        00:00:00 nginx: worker process
root      69175   2727  0 22:01 pts/0    00:00:00 grep --color=auto nginx
[root@192 sbin]# kill -QUIT 69172
[root@192 sbin]# ./nginx
[root@192 sbin]# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`

(3) 发送HUP信号给master进程,master进程会把控制旧的work进程不再接收新的请求,等处理完请求后将旧的work进程关闭掉,然后根据nginx的配置文件重新启动新的work进程:

[root@192 sbin]# ps -ef | grep nginx
root      69262      1  0 22:03 ?        00:00:00 nginx: master process ./nginx
nobody    69263  69262  0 22:03 ?        00:00:00 nginx: worker process
root      69311   2727  0 22:05 pts/0    00:00:00 grep --color=auto nginx
[root@192 sbin]# kill -HUP 69262
[root@192 sbin]# ps -ef | grep nginx
root      69262      1  0 22:03 ?        00:00:00 nginx: master process ./nginx
nobody    69318  69262  0 22:05 ?        00:00:00 nginx: worker process
root      69320   2727  0 22:05 pts/0    00:00:00 grep --color=auto nginx

可以看到 worker 进程的进程号变了。

(4) 发送USR1信号给master进程,告诉Nginx重新开启日志文件:

[root@192 logs]# ls
access.log  error.log  nginx.pid
[root@192 logs]# rm -rf error.log
[root@192 logs]# rm -rf access.log
[root@192 logs]# ls
nginx.pid
[root@192 logs]# kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
[root@192 logs]# ls
access.log  error.log  nginx.pid

(5) 发送WINCH信号给master进程,让master进程控制不让所有的work进程在接收新的请求了,请求处理完后关闭work进程。注意master进程不会被关闭掉:

[root@192 sbin]# ./nginx
[root@192 sbin]# ps -ef | grep nginx
root      69699      1  0 22:13 ?        00:00:00 nginx: master process ./nginx
nobody    69700  69699  0 22:13 ?        00:00:00 nginx: worker process
root      69704   2727  0 22:13 pts/0    00:00:00 grep --color=auto nginx
[root@192 sbin]# kill -WINCH `cat /usr/local/nginx/logs/nginx.pid`
[root@192 sbin]# ps -ef | grep nginx
root      69699      1  0 22:13 ?        00:00:00 nginx: master process ./nginx
root      69709   2727  0 22:14 pts/0    00:00:00 grep --color=auto nginx

(6) 发送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进程,让其处理完请求后再进行关闭:

在这里插入图片描述

[root@192 sbin]# ./nginx
[root@192 sbin]# ps -ef | grep nginx
root      69968      1  0 22:20 ?        00:00:00 nginx: master process ./nginx
nobody    69969  69968  0 22:20 ?        00:00:00 nginx: worker process
root      69971   2727  0 22:20 pts/0    00:00:00 grep --color=auto nginx
[root@192 sbin]# kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
[root@192 sbin]# ps -ef | grep nginx
root      69968      1  0 22:20 ?        00:00:00 nginx: master process ./nginx
nobody    69969  69968  0 22:20 ?        00:00:00 nginx: worker process
root      70009  69968  0 22:20 ?        00:00:00 nginx: master process ./nginx
nobody    70010  70009  0 22:20 ?        00:00:00 nginx: worker process
root      70014   2727  0 22:20 pts/0    00:00:00 grep --color=auto nginx
[root@192 sbin]# kill -QUIT 69968
[root@192 sbin]# ps -ef | grep nginx
root      70009      1  0 22:20 ?        00:00:00 nginx: master process ./nginx
nobody    70010  70009  0 22:20 ?        00:00:00 nginx: worker process
root      70056   2727  0 22:21 pts/0    00:00:00 grep --color=auto nginx

2. 命令行控制 Nginx 服务器的启动和停止

此方式是通过Nginx安装目录下的sbin下的可执行文件nginx来进行Nginx状态的控制,我们可以通过nginx -h来查看都有哪些参数可以用:

[root@192 sbin]# nginx -h
nginx version: nginx/1.24.0
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: /etc/nginx/)
  -e filename   : set error log file (default: /var/log/nginx/error.log)
  -c filename   : set configuration file (default: /etc/nginx/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服务指定启动时应用全局的配置。

② 快速关闭和启动 Nginx 服务器:

[root@192 sbin]# ./nginx -s stop
[root@192 sbin]# ps -ef | grep nginx
root      70300   2727  0 22:27 pts/0    00:00:00 grep --color=auto nginx
[root@192 sbin]# ./nginx
[root@192 sbin]# ./nginx -s reload

③ 指定Nginx的配置文件路径:

[root@192 conf]# cp nginx.conf abc.conf

# 在abc.conf中添加一行aaa,代表这个配置文件有语法错误
[root@192 conf]# vi abc.conf

# 测试指定nginx配置文件是否有语法错误,使用参数-t和-c
[root@192 sbin]# ./nginx -tc /usr/local/nginx/conf/abc.conf
nginx: [emerg] unknown directive "aaa" in /usr/local/nginx/conf/abc.conf:3
nginx: configuration file /usr/local/nginx/conf/abc.conf test failed

10. Nginx 服务器版本的升级和新增模块

如果想对Nginx的版本进行更新,或者要应用一些新的模块,最简单的做法就是停止当前的Nginx服务,然后开启新的Nginx服务。但是这样会导致在一段时间内,用户是无法访问服务器。为了解决这个问题,我们就需要用到Nginx服务器提供的平滑升级功能。这个也是Nginx的一大特点,使用这种方式,就可以使Nginx在7*24小时不间断的提供服务了。接下来我们分析下需求:

Nginx的版本最开始使用的是Nginx-1.14.2,由于服务升级,需要将Nginx的版本升级到Nginx-1.16.1,要求Nginx不能中断提供服务。

为了应对上述的需求,这里有两种解决方案: zz使用Nginx服务信号完成Nginx的升级

② 用Nginx安装目录的make命令完成升级

1. 环境准备

① 先准备两个版本的Nginx分别是 1.14.2和1.16.1

② 使用Nginx源码安装的方式将1.14.2版本安装成功并正确访问。

# 进入安装目录
./configure
make && make install

③ 将Nginx1.16.1进行参数配置和编译,不需要进行安装。

# 进入安装目录
./configure
make 

2. 使用 Nginx 服务信号进行升级

① 将1.14.2版本的sbin目录下的nginx进行备份

cd /usr/local/nginx/sbin
mv nginx nginxold

② 将Nginx1.16.1安装目录编译后的objs目录下的nginx文件,拷贝到原来/usr/local/nginx/sbin目录下

cd ~/nginx/core/nginx-1.16.1/objs
cp nginx /usr/local/nginx/sbin

③ 发送信号USR2给Nginx的1.14.2版本对应的master进程

④ 发送信号QUIT给Nginx的1.14.2版本对应的master进程

kill -QUIT `more /usr/local/logs/nginx.pid.oldbin`

3. 使用 Nginx 安装目录的make命令完成升级

① 将1.14.2版本的sbin目录下的nginx进行备份

cd /usr/local/nginx/sbin
mv nginx nginxold

② 将Nginx1.16.1安装目录编译后的objs目录下的nginx文件,拷贝到原来/usr/local/nginx/sbin目录下

cd ~/nginx/core/nginx-1.16.1/objs
cp nginx /usr/local/nginx/sbin

③ 进入到安装目录,执行make upgrade

在这里插入图片描述

④ 看是否更新成功

./nginx -v

在整个过程中,其实Nginx是一直对外提供服务的。并且当Nginx的服务器启动成功后,我们是可以通过浏览器进行直接访问的,同时我们可以通过更改html目录下的页面来修改我们在页面上所看到的内容。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大语言模型之七- Llama-2单GPU(T4 16G)微调(Fine-tune)

模型预训练colab脚本在github主页面。详见Finetuning_LLama_2_0_on_Colab_with_1_GPU.ipynb 在上一篇博客提到两种改进预训练模型性能的方法Retrieval-Augmented Generation (RAG) 或者 finetuning。本篇博客过一下模型微调。 微调&#xff1a;这是采用预训练的LLM并在较小的…

电磁式电压互感器直流电阻测试

试验目的 测量电磁式电压互感器直流电阻的目 的是检查其一次、 二次绕组的质量及回路的完整性&#xff0c; 以发现各种原因所造成的导线断裂、 接头开焊、 接触不良、 匝间短路等缺陷。 试验设备 变压器直流电阻测试仪 厂家&#xff1a; 湖北众拓高试 试验方法 一次绕组直流…

Spring——RESTful Web服务

文章目录 RESTful Web 服务介绍内容概览下载 Lombok 优化代码利器RESTful Web 服务开发运行项目并测试效果 RESTful Web 服务介绍 本节我们将开发一个简单的 RESTful Web 服务。 RESTful Web 服务与传统的 MVC 开发一个关键区别是返回给客户端的内容的创建方式&#xff1a;传…

使用Vue3和Vite升级你的Vue2+Webpack项目

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

JAVA基础-JDBC

本博客记录JAVA基础JDBC部分的学习内容 JDBC基本概念 JDBC : JAVA链接数据库&#xff0c;是JAVA链接数据库的技术的统称&#xff0c;包含如下两部分&#xff1a; 1. JAVA提供的JDBC规范&#xff08;即各种数据库接口&#xff09;存储在java.sql 和 javax.sql中的api 2. 各个数…

【基于交叉注意力的泛锐化深度展开迭代网络】

CADUI: Cross-Attention-Based Depth Unfolding Iteration Network for Pansharpening Remote Sensing Images &#xff08;CADUI&#xff1a;基于交叉注意力的泛锐化深度展开迭代网络&#xff09; 全色锐化是遥感成像系统获取高分辨率多光谱图像的重要技术。它主要通过融合低…

项目验收有哪些流程?

验收流程 科技计划项目验收/课题验收测试服务的被测对象是国家重大专项、科研课题的软件成果物&#xff0c;可以是一个模块、软件或系统等&#xff0c;也可以是软件套件或软件原型等。测试范围主要来源于课题的合同书/可行吧报告/申报书中的技术指标要求。所出具的科技项目验收…

CRM如何提高销售效率?三个功能实现销售自动化

销售效率对企业的盈利能力有着至关重要的联系。提高销售效率&#xff0c;就是要提高销售人员的工作效率和销售转化率。那么&#xff0c;企业如何提高销售效率呢&#xff1f;CRM销售自动化功能可以帮助企业实现这一目标。 一、线索管理 线索是指有潜在购买意向的客户&#xff…

git文件夹内容详解

.git文件夹是Git版本控制系统在项目根目录下创建的隐藏文件夹&#xff0c;包含了Git仓库的所有相关信息。如下是.git文件夹中常见的一些内容及其作用&#xff1a; HEAD&#xff1a;指向当前所在的分支&#xff08;或者是一个特定的提交&#xff09;。 branches&#xff1a;存储…

java+springboot+mysql校园跑腿管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的校园跑腿管理系统&#xff0c;系统包含超级管理员&#xff0c;系统管理员、用户角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理&#xff1b;用户管理&#xff08;充值&#xff09;&#xff1b;任…

LuatOS 开发指南

NDK 开发 官方教程 官方例程 API 下载软件 下载官方NDK例程压缩包到本地&#xff0c;并解压。可以看到目录如下&#xff1a; doc: 文档教程 env: 编译环境 example: NDK示例 platform: 需要编译的平台&#xff08;air72x/air8xx&#xff09; tools: 其他辅助软件 VSCode 使…

jmeter传参base64卡顿如何解决

部分接口需要传图片base64格式参数&#xff0c;但是输入转为base64格式的图片参数&#xff0c;jmeter直接卡死&#xff0c;甚至电脑也卡死&#xff0c;此时&#xff0c;只需要去掉文件头描述&#xff1a;data:image/jpeg;base64, 即可

应用案例 | 基于三维机器视觉的机器人麻袋拆垛应用解决方案

​Part.1 项目背景 在现代物流和制造行业中&#xff0c;麻袋的拆垛操作是一个重要且频繁的任务。传统的麻袋拆垛工作通常由人工完成&#xff0c;分拣效率较低&#xff0c;人力成本较高&#xff0c;现场麻袋堆叠、变形严重&#xff0c;垛型不规则、不固定&#xff0c;严重影响分…

EXD 设计访谈|Vol.1 从“组件容器”聊到 B 端设计师的价值自证瓶颈

主持&#xff1a;元宝&#xff5c;嘉宾&#xff1a;赫本 《EXD 设计访谈》是由 EXD&#xff08;易知微用户体验设计团队&#xff09;制作的一档设计聊天栏目&#xff0c;主要和你分享我们在易知微这家公司里&#xff0c;关于 B 端工具设计、可视化内容设计、ToB 品牌运营设计方…

vue左侧漏斗切换 echart图表动态更新

这个需求是根据点击左侧的箭头部分&#xff0c;右侧图表切换&#xff0c;左侧选中数据高亮&#xff08;图片用的svg&#xff09; 一、效果图 二、vue组件 <template><div class"funnel_wrap"><div class"flex_between"><div class&q…

时序预测 | MATLAB实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测(多指标评价)

时序预测 | MATLAB实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测(多指标评价) 目录 时序预测 | MATLAB实现基于TSO-XGBoost金枪鱼算法优化XGBoost的时间序列预测(多指标评价)预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现基于TSO-XGBoost金枪鱼算…

基于YOLO v5的病虫害检测与优化

《A fast and lightweight detection algorithm for passion fruit pests based on improved YOLOv5》 a new point-line distance loss function is proposed to reduce redundant computations and shorten detection timethe attention module is added to the network for…

【人工智能】—_神经网络、M-P_神经元模型、激活函数、神经网络结构、学习网络参数、代价定义、总代价

M-P_神经元模型、激活函数、神经网络结构、学习网络参数、代价定义 文章目录 M-P_神经元模型、激活函数、神经网络结构、学习网络参数、代价定义 M-P 神经元模型激活函数(Activation function)神经网络结构举例训练神经网络学习网络参数代价定义均方误差交叉熵&#xff08;Cros…

设计模式行为型-模板模式

文章目录 一&#xff1a;模板方法设计模式概述1.1 简介1.2 定义和目的1.3 关键特点1.4 适用场景 二&#xff1a;模板方法设计模式基本原理2.1 抽象类2.1.1 定义和作用2.1.2 模板方法2.1.3 具体方法 2.2 具体类2.2.1 定义和作用2.2.2 实现抽象类中的抽象方法2.2.3 覆盖钩子方法 …

3.1.6 练习 基于GPA排名计算本专业保研名单

C自学精简教程 目录(必读) GPA概念回顾 平均学分绩点GPA(Grade Point Average)是对一个学生大学学习成绩的综合的衡量指标。 在前面的文章 本科生学分绩点GPA计算 中&#xff0c;我们知道了什么是平均学分绩点GPA&#xff0c;以及如何计算它。 基于GPA给学生排名 现在我们…