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 应用
- 需要实时计算或数据库查询的内容(如搜索结果、用户评论、购物车等)
- PHP 文件(例如
-
特点:
- 内容通常会根据用户的请求、数据变化、用户输入等而变化。
- 需要 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 的工作流程:
- Web 服务器接收到请求:当用户访问动态页面时,Web 服务器会识别该请求是需要通过程序来处理(如 PHP 脚本)。
- 执行外部程序:Web 服务器调用一个外部程序(CGI 程序),并将请求的相关信息传递给该程序(如 HTTP 头信息、表单数据等)。
- 外部程序处理请求:CGI 程序执行某些操作(如访问数据库、处理用户输入等),然后生成 HTML 响应。
- 返回给 Web 服务器:CGI 程序生成的 HTML 被返回给 Web 服务器。
- 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 的工作流程:
- Web 服务器接收到请求:Web 服务器处理静态资源请求,对于动态资源请求,会将请求转发给 FastCGI 进程。
- FastCGI 进程池:FastCGI 后端保持着多个常驻的进程来处理请求,每个进程可以处理多个请求,避免了频繁的进程创建和销毁。
- FastCGI 处理请求:FastCGI 进程接收到请求后,处理并生成动态内容(例如通过 PHP 脚本查询数据库)。
- 返回给 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 的工作流程:
- Web 服务器接收到请求:Web 服务器(如 Nginx)接收到 PHP 请求时,转发给 PHP-FPM 进程池。
- PHP-FPM 进程池:PHP-FPM 启动多个 PHP 进程来处理请求。这些进程长期运行,可以同时处理多个请求。
- PHP 脚本处理:PHP-FPM 进程接收到请求后,执行 PHP 脚本,通常会访问数据库、处理表单数据等。
- 返回响应: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)
- HTTPS 是 HTTP(超文本传输协议)的安全版。它通过在 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)、GlobalSign、Let'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)
- 使用 OpenSSL 工具生成一个 RSA 私钥和一个自签名的公钥证书。自签名证书适用于内部测试或开发环境。
-
生成证书请求文件(CSR)(步骤 2)
- 生成一个证书请求文件(CSR),这个文件将用来向证书颁发机构(CA)申请公有证书。CSR 文件会包含网站的公钥和其他信息。
-
提交 CSR 给 CA 进行签发(步骤 3)
- 提交 CSR 文件给受信的证书颁发机构(CA)进行签发。此步骤通常是手动操作,根据选择的 CA 提交请求,并通过域名验证等方式验证身份。
-
配置证书到 Web 服务器(步骤 4)
- 配置 Nginx 服务器(也可以是其他 Web 服务器)使用 SSL 证书,启用 HTTPS 加密传输。需要将公钥证书和私钥文件路径配置到 Nginx 配置文件中。
-
定期检查和更新证书(步骤 5)
- 对于公有证书,如 Let's Encrypt,证书有有效期,通常为 90 天,需要定期自动更新证书。使用
certbot
等工具可以自动续期证书。
- 对于公有证书,如 Let's Encrypt,证书有有效期,通常为 90 天,需要定期自动更新证书。使用
-
验证证书是否正确安装(步骤 6,可选)
- 使用
openssl s_client
命令检查服务器上 SSL 证书的安装情况,确保证书正确部署并且可信。
- 使用
注意:
- 生成的自签名证书仅适用于测试和开发环境,对于生产环境,建议使用受信任的公有证书。
- 在获取公有证书时,请确保正确配置域名验证和身份验证过程。
- 证书的更新和管理非常重要,确保定期检查证书的有效性并进行更新。
公有证书(csdn一下,或者看看视频)
六,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,可以通过以下步骤进行升级:
-
下载新的 Nginx 源代码版本:
-
wget https://nginx.org/download/nginx-<new_version>.tar.gz
-
-
解压并进入目录:
-
tar -zxvf nginx-<new_version>.tar.gz
cd nginx-<new_version>
-
-
配置编译参数(根据当前安装的 Nginx 配置进行相同的配置):
-
./configure --prefix=/etc/nginx --with-http_ssl_module --with-http_v2_module # 示例参数,根据实际情况调整
-
-
编译并安装:
-
make
sudo make install
-
-
重新加载 Nginx 配置,确保新版本生效:
-
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 进程发送信号来让其优雅地停止。
-
平滑重载:当你运行
nginx -s reload
命令时,Nginx 会执行以下操作:- 主进程会重新加载配置文件。
- 新的工作进程会启动并开始处理新的请求。
- 旧的工作进程继续处理它们正在处理的连接。
- 一旦旧进程处理完所有请求,它们就会被终止。
-
信号控制:
-
nginx -s reload
:向 Nginx 主进程发送HUP
信号,通知它重新加载配置。 -
nginx -s stop
:向主进程发送TERM
信号,强制 Nginx 停止所有进程(不推荐用于平滑升级)。 -
nginx -s quit
:向主进程发送QUIT
信号,要求它退出并优雅地关闭连接(也是一种平滑停止方法)。
-