day3:Nginx实战——PHP

一,项目开发流程

项目生命周期

二,资源

概述

在 Web 开发中,资源通常分为 静态资源动态资源,两者的区别主要体现在如何生成和处理请求。对应不同软件资源不同,对于网站来说,资源就是从网站从根开始的所有文件。

静态与动态

静态资源 是指服务器返回的内容在浏览器中不需要改变或处理的文件,直接呈现给用户。这些资源通常不会根据用户的请求或输入而发生变化。

  • 常见静态资源

    • HTML 文件
    • CSS 文件
    • JavaScript 文件
    • 图片(JPEG, PNG, GIF 等)
    • 字体文件(如 .woff, .ttf
  • 特点

    • 直接从磁盘读取,不涉及计算或数据库查询。
    • 高效、响应速度快,通常由 Nginx 直接提供给客户端。
    • 适用于不需要频繁更新的资源,如网站布局、样式、图像等。

常见的资源文件

动态资源 是指服务器根据请求生成的内容,通常涉及数据库查询、文件处理、用户输入等。每次请求可能会生成不同的内容,具体内容由服务器端的应用程序(如 PHP、Python、Node.js 等)处理。

  • 常见动态资源

    • PHP 文件(例如 index.php
    • Python/Django/Flask 文件
    • Node.js 应用
    • 需要实时计算或数据库查询的内容(如搜索结果、用户评论、购物车等)
  • 特点

    • 内容通常会根据用户的请求、数据变化、用户输入等而变化。
    • 需要 Web 服务器与应用程序(如 PHP、Python)进行配合处理,通常通过 Nginx 配合 FastCGI 或反向代理来处理动态请求。
    • 响应速度较慢,因为它们需要动态生成和处理内容。

三,lnmp项目部署

linux部署

#!/bin/bash

#1.设置主机名

hostnamectl set-hostname lnmp

#2.关闭防火墙

systemctl stop firewalid && systemctl disable firewa11d

setenforce 0

sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

#3.配置yum源

cd /etc/yum.repos.d

mkdir bak

mv *.repo bak

cur1 -0 /etc/yum,repos.d/cent0s-Base.repo https://mirrors.aliyun.com/repo/centos-7.repo

yum clean all

yum makecache

yum install epel-release -y --nogpgcheck

#4.重启

reboot

Nginx部署

vim /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/mainine/centos/$releasever/$basearch/

gpgcheck=1

enabled=0

gpgkey=https://nginx.org/keys/nginx_signing.key

module_hotfixes=true
#___________________文件内设置----------------------

yum install yum-utils -y

yum install nginx -y

systemctl enable nginx --now

PHP部署

yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm

yum-config-manager --enable remi-php73

yum install -y php php-mysqlnd gd php-gd

vim /usr/share/nginx/html/index.php
#-----------------php文件-----------------

<?php

phpinfo();

?>
#-----------------php文件-----------------

vim /etc/nginx/conf.d/default.conf
#-----------------nginx文件-----------------
server {

1ocation /{
        ……
        index index.php index.html;
        ……
    }
}
#-----------------nginx文件-----------------

systemctl restart nginx

访问地址:http://你的ip

现在访问,会直接下载文件,因为nginx没有将php文件交个php进行解析。

#安装并启用php-fpm
yum install php-fpm.x86_64 -y

systemctl enable php-fpm --now
#修改Nginx配置文件

vim /etc/nginx/conf.d/default.conf
#------------------文件配置--------------
location ~\.php$ {

root /usr/share/nginx/html;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;
}
#------------------文件配置--------------
systemctl restart nginx

MySQL部署

yum -y install mariadb-server mariadb

systemctl enable mariadb --now

mysql -uroot -p(回车就对了,没有密码)

#-------------------数据库命令--------------------------
ALTER USER 'root'@'localhost' IDENTIFIED BY 'ly';(不行就用下面这句)
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('ly');

create database wordpress default charset utf8;

flush privileges;(刷新权限)

#-------------------数据库命令--------------------------

业务上线(使用WordPress——就不写了)

四,fastcgi和php-fpm模块

cgi概述

CGI(Common Gateway Interface) 是一种标准协议,允许 Web 服务器与外部程序进行交互,通常用于动态生成网页内容。CGI 是早期 Web 开发中用来处理动态请求的主要方式,尤其是在静态网页无法满足需求时,CGI 使得 Web 服务器能够执行后端程序(如 PHP、Python、Perl 等)并将结果返回给客户端。

CGI 的工作流程:
  1. Web 服务器接收到请求:当用户访问动态页面时,Web 服务器会识别该请求是需要通过程序来处理(如 PHP 脚本)。
  2. 执行外部程序:Web 服务器调用一个外部程序(CGI 程序),并将请求的相关信息传递给该程序(如 HTTP 头信息、表单数据等)。
  3. 外部程序处理请求:CGI 程序执行某些操作(如访问数据库、处理用户输入等),然后生成 HTML 响应。
  4. 返回给 Web 服务器:CGI 程序生成的 HTML 被返回给 Web 服务器。
  5. Web 服务器响应客户端:Web 服务器将 HTML 响应返回给客户端浏览器,显示给用户。
CGI 的问题:
  • 性能较差:每次请求都会启动一个新的进程来处理 CGI 脚本,效率较低。
  • 资源消耗高:频繁创建和销毁进程会导致资源浪费,尤其是在高并发场景下。
  • 不能高效处理并发请求:由于每个请求都需要独立的进程处理,CGI 在并发负载较大时性能会严重下降。

因此,CGI 通常不再被广泛使用,取而代之的是更高效的 FastCGI 和 PHP-FPM 等技术。

fastcgi

FastCGI 是对传统 CGI 的一种改进,旨在提高 Web 服务器和动态内容生成程序之间的通信效率。FastCGI 将 CGI 的缺点(每个请求都启动新进程)改进为长期运行的进程模型,从而大幅提高了性能。

FastCGI 的特点:
  • 持久化进程:FastCGI 使用的是长期运行的进程来处理请求,而不是每次请求都启动一个新的进程。这样,Web 服务器可以与 FastCGI 后端保持连接,复用已经启动的进程。
  • 并发处理:FastCGI 支持多个并发请求,可以更高效地利用系统资源。
  • 协议独立性:FastCGI 不依赖于特定的编程语言,它可以与多种编程语言(如 PHP、Python、Perl 等)一起使用。
  • 跨平台支持:FastCGI 可以跨不同的 Web 服务器和操作系统进行工作。
FastCGI 的工作流程:
  1. Web 服务器接收到请求:Web 服务器处理静态资源请求,对于动态资源请求,会将请求转发给 FastCGI 进程。
  2. FastCGI 进程池:FastCGI 后端保持着多个常驻的进程来处理请求,每个进程可以处理多个请求,避免了频繁的进程创建和销毁。
  3. FastCGI 处理请求:FastCGI 进程接收到请求后,处理并生成动态内容(例如通过 PHP 脚本查询数据库)。
  4. 返回给 Web 服务器:FastCGI 将处理结果返回给 Web 服务器,Web 服务器再将响应返回给客户端。
FastCGI 的优点:
  • 高效性:通过持久化进程池,避免了频繁启动进程的开销,提高了性能。
  • 资源复用:多个请求可以复用相同的进程,减少了资源消耗。
  • 高并发支持:可以处理更多的并发请求,适用于大流量网站。
  • 跨语言支持:不仅限于 PHP,FastCGI 也可以与其他语言(如 Python、Ruby、Perl 等)一起使用。
FastCGI 与传统 CGI 的对比:
特性 CGI FastCGI
进程模型 每个请求一个新的进程 长期运行的进程池
性能 较低,每次请求都启动进程 较高,复用进程
资源消耗 高,频繁创建销毁进程 低,复用进程节省资源
并发处理能力 较差 较好,能够同时处理多个请求
灵活性 与语言无关,但性能差 与语言无关,支持多种语言和协议

php-fpm

PHP-FPM(PHP FastCGI Process Manager) 是 PHP 语言的一个实现,它是基于 FastCGI 的进程管理器,专为提高 PHP 性能而设计。PHP-FPM 改善了 PHP 的性能,特别是在高负载和高并发的环境下。

PHP-FPM 的特点:
  • 进程池管理:PHP-FPM 提供了对 PHP 进程池的管理,可以根据系统负载调整进程数目,从而优化性能。
  • 平滑重载:在不停止服务的情况下,PHP-FPM 可以进行配置的更新和进程的重新加载。
  • 池化机制:通过创建多个工作进程池,PHP-FPM 可以更高效地处理多个请求。
  • 监控和日志:PHP-FPM 提供了详细的日志功能,可以帮助管理员监控性能和解决问题。
PHP-FPM 的工作流程:
  1. Web 服务器接收到请求:Web 服务器(如 Nginx)接收到 PHP 请求时,转发给 PHP-FPM 进程池。
  2. PHP-FPM 进程池:PHP-FPM 启动多个 PHP 进程来处理请求。这些进程长期运行,可以同时处理多个请求。
  3. PHP 脚本处理:PHP-FPM 进程接收到请求后,执行 PHP 脚本,通常会访问数据库、处理表单数据等。
  4. 返回响应:PHP-FPM 将处理结果返回给 Web 服务器,Web 服务器将响应返回给客户端。
PHP-FPM 的优点:
  • 性能优化:通过复用进程池,PHP-FPM 提高了性能,避免了每次请求都启动新的 PHP 进程。
  • 高并发支持:可以处理高并发的请求,适合大流量网站。
  • 灵活配置:PHP-FPM 提供了详细的配置选项,能够优化性能,平衡负载。
  • 容错机制:PHP-FPM 支持动态调整进程数目,可以根据服务器负载自动调整进程数,避免资源浪费。
server {
    listen 80;
    server_name example.com;

    location / {
        root /var/www/html;
        index index.php;
    }
#----------------------------------------
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;  # PHP-FPM 后端
        fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
        include fastcgi_params;
    }
#----------------------------------------
}
  • fastcgi_pass 127.0.0.1:9000;:指向 PHP-FPM 服务的地址,通常是 127.0.0.1(本地)和 9000 端口。
  • fastcgi_param SCRIPT_FILENAME:指定 PHP 脚本的位置。

五,ca和https

概述

CA(证书颁发机构)HTTPS 是现代 Web 安全的核心技术。它们确保了网站和用户之间的通信是加密的,并且验证了通信双方的身份。

1. HTTPS(HyperText Transfer Protocol Secure)
  • HTTPSHTTP(超文本传输协议)的安全版。它通过在 HTTP 上增加 SSL/TLS(安全套接层/传输层安全性)协议来加密数据,确保数据在传输过程中不会被窃听或篡改。
  • 加密与认证:HTTPS 使用公钥加密来加密数据,并使用数字证书来验证网站身份。
  • 工作原理
    • TLS/SSL 握手:当浏览器与 Web 服务器建立连接时,首先会进行 TLS/SSL 握手,协商加密方式并交换密钥。
    • 加密传输:握手完成后,客户端和服务器之间的所有数据交换都通过加密通道进行,确保数据的保密性和完整性。
2. CA(证书颁发机构)
  • CA 是一个受信任的第三方机构,负责颁发和管理数字证书。数字证书用于验证公钥的真实性,确保通信双方的身份是可信的。
  • CA 使用私钥签名证书来验证一个网站或服务器的身份。通过这种方式,CA 确保了网站身份的合法性,防止伪造和钓鱼网站。

私有证书

私有证书通常是由组织内部的证书颁发机构(CA)签发的,用于内部网络或应用的加密与身份验证。私有证书的使用通常不涉及公共信任体系。

  • 特点

    • 内部使用:适用于组织内部的通信,如企业内部网站、内部 API、开发环境等。
    • 自签名证书:私有证书通常是自签名的,意味着证书是由企业或组织自己的 CA 签发的,而不是由公开的受信 CA 签发。
    • 受限信任:私有证书不会被操作系统或浏览器自动信任,通常需要手动安装或配置信任链。
  • 应用场景

    • 内部 Web 服务:公司内部网站、内部服务等。
    • 开发和测试环境:在开发阶段使用私有证书进行测试,避免涉及公共 CA 费用和管理。
    • 虚拟私有网络(VPN):用于加密公司内部的 VPN 通信。
  • 如何使用

    • 可以使用 OpenSSL企业级证书管理工具 来生成自签名证书。
    • 需要配置客户端信任该证书,通常手动安装证书到浏览器或操作系统的证书存储区。

公有证书

公有证书是由公开信任的 证书颁发机构(CA) 签发的,这些证书可以被广泛的操作系统、浏览器和其他客户端信任。公有证书是最常见的 HTTPS 证书类型,广泛应用于互联网上的网站和服务。

  • 特点

    • 全球信任:公有证书由被信任的 CA 签发,如 Symantec(现为 DigiCert)GlobalSignLet's Encrypt 等,浏览器和操作系统默认信任这些证书。
    • 身份验证:通过公有证书,网站的身份可以得到验证,用户可以确定自己访问的是合法网站。
    • 加密传输:公有证书使得 HTTPS 加密通信成为可能,保护用户的隐私和数据安全。
    • 证书链:公有证书通常会形成一个证书链,包含根证书、中间证书和网站证书,确保从根证书到服务器证书的信任链完整。
  • 应用场景

    • 公众网站:所有面向公众的安全网站,如银行、电子商务平台、社交网络等,都需要使用由受信 CA 签发的公有证书。
    • 商业应用:用于电子商务、在线支付、社交平台等需要保证数据安全和用户隐私的场合。
    • 邮件服务器:为了确保邮件通信的安全,许多邮件服务器也使用公有证书。
  • 如何使用

    • 需要向 CA 申请证书,并且提供相关身份验证材料。验证方式可以是通过域名控制(DV),组织验证(OV),或者扩展验证(EV)等。
    • 获取证书后,需要将证书配置到 Web 服务器(如 Nginx、Apache 等),并确保证书链完整。

私有证书与公有证书的比较

特性 私有证书 公有证书
颁发机构 由内部 CA 或自签名证书颁发 由受信的公有 CA 颁发
信任范围 仅限于内部网络和特定客户端 受所有主要操作系统和浏览器的信任
适用场景 内部应用、开发环境、测试环境 公众网站、电子商务、银行等
证书安装 需要手动安装或配置客户端信任 客户端自动信任
安全性 较低(取决于 CA 和签名的安全性) 高,受 CA 的审核和保证
成本 低或零,特别是自签名证书 有费用,取决于 CA 和证书类型

如何获取和管理证书(可以略过)

#!/bin/bash

#-----------------------------------------------------
# 获取和管理证书的完整流程
# 流程:1. 生成私有证书(自签名证书)
#       2. 生成证书请求文件(CSR)
#       3. 提交 CSR 给 CA 申请公有证书
#       4. 配置证书到 Web 服务器(如 Nginx)
#       5. 定期检查并更新证书
#-----------------------------------------------------

# 1. 生成自签名证书
echo "-----------------------------------------------------"
echo "步骤 1: 生成自签名证书"
echo "-----------------------------------------------------"
DAYS=365  # 证书有效期设置为365天
KEY_FILE="server.key"  # 私钥文件名
CRT_FILE="server.crt"  # 公钥证书文件名

# 使用 OpenSSL 生成自签名证书
echo "生成自签名证书和私钥..."
openssl req -x509 -nodes -days $DAYS -newkey rsa:2048 \
  -keyout $KEY_FILE -out $CRT_FILE

# 输出生成结果
echo "证书和私钥生成成功:"
echo "私钥文件:$KEY_FILE"
echo "证书文件:$CRT_FILE"
echo "-----------------------------------------------------"

# 2. 生成证书请求文件(CSR)
echo "-----------------------------------------------------"
echo "步骤 2: 生成证书请求文件(CSR)"
echo "-----------------------------------------------------"
CSR_FILE="server.csr"  # 证书请求文件
echo "生成证书请求文件(CSR)..."
openssl req -new -key $KEY_FILE -out $CSR_FILE

# 输出生成结果
echo "证书请求文件生成成功:"
echo "CSR 文件:$CSR_FILE"
echo "-----------------------------------------------------"

# 3. 提交 CSR 文件给 CA 进行签发(此部分为手动操作)
echo "-----------------------------------------------------"
echo "步骤 3: 提交 CSR 文件给 CA 进行签发"
echo "-----------------------------------------------------"
echo "请访问受信任的证书颁发机构(CA)并提交 CSR 文件进行证书申请。"
echo "常见的 CA 如 DigiCert, GlobalSign, Let's Encrypt 等。"
echo "证书申请时会需要验证域名所有权(通过 DNS 或 HTTP 验证)和身份验证(如 OV 或 EV)。"
echo "一旦获得公有证书,请继续以下步骤。"
echo "-----------------------------------------------------"

# 4. 配置证书到 Web 服务器(以 Nginx 为例)
echo "-----------------------------------------------------"
echo "步骤 4: 配置证书到 Web 服务器"
echo "-----------------------------------------------------"
CRT_FILE="/path/to/your/server.crt"  # 公钥证书路径
KEY_FILE="/path/to/your/server.key"  # 私钥证书路径

# 配置 Nginx 使用 SSL 证书
echo "配置 Nginx 使用 SSL 证书..."
cat << EOF > /etc/nginx/sites-available/default
server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate $CRT_FILE;
    ssl_certificate_key $KEY_FILE;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}
EOF

# 重新加载 Nginx 配置以应用新证书
nginx -s reload

echo "Nginx 配置成功,已启用 HTTPS。"
echo "-----------------------------------------------------"

# 5. 定期检查和更新证书(以 Let's Encrypt 为例)
echo "-----------------------------------------------------"
echo "步骤 5: 定期检查和更新证书"
echo "-----------------------------------------------------"
echo "若使用 Let's Encrypt 等免费证书,证书会有有效期(通常是90天)。"
echo "为了确保证书不会过期,请定期更新证书。"
echo "自动更新证书(使用 certbot):"
echo "运行以下命令以自动更新证书:"
echo "certbot renew --quiet"
echo "并重新加载 Nginx 配置以应用新证书:"
echo "nginx -s reload"
echo "-----------------------------------------------------"

# 6. 验证证书是否正确安装(可选)
echo "-----------------------------------------------------"
echo "步骤 6: 验证证书是否正确安装"
echo "-----------------------------------------------------"
echo "检查证书是否正确安装,可以使用 OpenSSL 来测试连接:"
echo "openssl s_client -connect example.com:443 -showcerts"
echo "-----------------------------------------------------"

echo "证书生成和管理过程完成。"

脚本流程说明:

  1. 生成自签名证书(步骤 1)

    • 使用 OpenSSL 工具生成一个 RSA 私钥和一个自签名的公钥证书。自签名证书适用于内部测试或开发环境。
  2. 生成证书请求文件(CSR)(步骤 2)

    • 生成一个证书请求文件(CSR),这个文件将用来向证书颁发机构(CA)申请公有证书。CSR 文件会包含网站的公钥和其他信息。
  3. 提交 CSR 给 CA 进行签发(步骤 3)

    • 提交 CSR 文件给受信的证书颁发机构(CA)进行签发。此步骤通常是手动操作,根据选择的 CA 提交请求,并通过域名验证等方式验证身份。
  4. 配置证书到 Web 服务器(步骤 4)

    • 配置 Nginx 服务器(也可以是其他 Web 服务器)使用 SSL 证书,启用 HTTPS 加密传输。需要将公钥证书和私钥文件路径配置到 Nginx 配置文件中。
  5. 定期检查和更新证书(步骤 5)

    • 对于公有证书,如 Let's Encrypt,证书有有效期,通常为 90 天,需要定期自动更新证书。使用 certbot 等工具可以自动续期证书。
  6. 验证证书是否正确安装(步骤 6,可选)

    • 使用 openssl s_client 命令检查服务器上 SSL 证书的安装情况,确保证书正确部署并且可信。

注意:

  • 生成的自签名证书仅适用于测试和开发环境,对于生产环境,建议使用受信任的公有证书。
  • 在获取公有证书时,请确保正确配置域名验证和身份验证过程。
  • 证书的更新和管理非常重要,确保定期检查证书的有效性并进行更新。

公有证书(csdn一下,或者看看视频)

170-阿里云公有证书_哔哩哔哩_bilibili

六,Nginx平滑升级

Nginx 平滑升级(也叫 热升级)是指在不停止现有服务的情况下更新或升级 Nginx 的配置和版本,使得 Nginx 能够继续处理请求,同时避免出现服务中断或掉线。这个过程对于保证高可用性非常重要,尤其是在生产环境中。{重要的是Nginx -s reload这个命令}

Nginx 支持平滑升级,通过以下几个步骤完成:

Nginx 平滑升级步骤

1. 检查当前 Nginx 配置是否有误

在进行任何升级之前,首先要确保当前 Nginx 配置文件是正确的。如果配置有误,Nginx 启动时将无法加载新配置文件。

# 检查配置文件语法是否正确
sudo nginx -t

如果出现错误,根据提示修正配置文件中的问题。

2. 重载 Nginx 配置(平滑重载)

重载配置是指在不停止 Nginx 进程的情况下重新加载配置文件。这种方式会使 Nginx 重新读取配置文件,并应用新的配置,而不会影响当前的连接。

# 重载 Nginx 配置文件
sudo nginx -s reload

这会使 Nginx 主进程重新加载配置文件并平滑地应用新配置。当前的连接会继续处理,新的连接将会使用新配置。

3. 安装和升级 Nginx(实际升级步骤){二选一}

Nginx 版本升级通常包括两个部分:更新 Nginx 二进制文件和更新配置文件。

步骤 1:更新 Nginx 软件包(使用包管理器)

如果你是通过包管理器安装 Nginx(如 yum),可以直接通过以下命令更新 Nginx 版本。

# 更新包列表并升级 Nginx
sudo yum update nginx
步骤 2:编译和安装新的 Nginx 版本(源代码安装)

如果你是从源代码编译安装 Nginx,可以通过以下步骤进行升级:

  1. 下载新的 Nginx 源代码版本:

    1. wget https://nginx.org/download/nginx-<new_version>.tar.gz

  2. 解压并进入目录:

    1. tar -zxvf nginx-<new_version>.tar.gz
      cd nginx-<new_version>

  3. 配置编译参数(根据当前安装的 Nginx 配置进行相同的配置):

    1. ./configure --prefix=/etc/nginx --with-http_ssl_module --with-http_v2_module # 示例参数,根据实际情况调整

  4. 编译并安装:

    1. make
      sudo make install

  5. 重新加载 Nginx 配置,确保新版本生效:

    1. sudo nginx -s reload

4. 平滑升级验证

在进行平滑升级后,可以使用以下命令验证 Nginx 的状态,确保新版本正在运行,并且没有出现错误。

# 查看 Nginx 进程信息
ps aux | grep nginx

你应该看到一个新的 Nginx 进程在运行,并且旧的进程已经被替换。

5. 清理旧版本的二进制文件和配置文件(可选)

如果你从源代码编译并安装了 Nginx,旧版本的文件可能仍然存在。可以清理这些不再需要的文件。

# 清理 Nginx 编译产生的文件
cd /path/to/nginx-<old_version>
make clean

Nginx 平滑升级的工作原理

Nginx 平滑升级的核心机制基于 Unix 信号,它利用了操作系统的进程管理功能,通过向旧的 Nginx 进程发送信号来让其优雅地停止。

  1. 平滑重载:当你运行 nginx -s reload 命令时,Nginx 会执行以下操作:

    • 主进程会重新加载配置文件。
    • 新的工作进程会启动并开始处理新的请求。
    • 旧的工作进程继续处理它们正在处理的连接。
    • 一旦旧进程处理完所有请求,它们就会被终止。
  2. 信号控制

    • nginx -s reload:向 Nginx 主进程发送 HUP 信号,通知它重新加载配置。
    • nginx -s stop:向主进程发送 TERM 信号,强制 Nginx 停止所有进程(不推荐用于平滑升级)。
    • nginx -s quit:向主进程发送 QUIT 信号,要求它退出并优雅地关闭连接(也是一种平滑停止方法)。