专栏 ➡️ 跟我一起学 Nginx juejin.cn/column/7307...
运行 Nginx 程序
调用 Nginx 二进制可执行程序并传参
bash
cd /usr/local/nginx/sbin
./nginx -tq
./nginx
命令常用参数
** 参数** | 功能 |
---|---|
-h |
查看 Nginx 提供的常用命令 |
-v |
查看 Nginx 版本号 |
-V |
查看 Nginx 版本号 & 编译环境 & 配置信息 |
-t |
测试 Nginx 配置文件语法是否正确 |
-T |
测试 Nginx 配置文件语法是否正确 & 输出配置文件 & 输出 MIME 文件内容 |
-s |
将信号量(Signal)传递到 Nginx 的 Master 进程 |
nginx -s quit 优雅关闭服务 |
|
nginx -s stop 立即停止服务 |
|
nginx -s reload 重启服务 |
|
nginx -s reopen 重新打开日志 |
|
-q |
安静模式执行(quiet),只有报错才会输出信息。 |
-p <path> |
指定一个新的 nginx 安装目录 |
-c <file> |
启动服务并设置配置文件路径 |
-e <file> |
启动服务并设置 error.log 文件路径 |
优雅关闭:会等待已有的请求响应完毕后再关闭 Nginx 服务。
系统命令启动
将 Nginx 程序加入到系统命令中,从而方便全局执行。
配置起来非常简单,只需要将 Nginx 的 sbin
目录路径加入到系统环境变量中即可。
(1) 编辑 /etc/profile
文件
(2) 加入 PATH,并用 :
分割
bash
//....
export PATH = $PATH:/usr/local/nginx/sbin
source /etc/profile
(3) 使用 which nginx
命令检查配置是否生效
(4) 执行全局的 nginx 命令
bash
nginx -v
nginx -t
如果提示没有权限可以通过
su
命令进入到 root 用户环境中再执行
守护进程启动(Systemd)
通过使用 Linux 系统的 Systemd
工具,可以以守护进程的方式启动 Nginx 服务,守护进程的方式不仅可以全局执行,还可以使其长久保持运行并可开机自动启动。
使用 Systemd
工具之前,我们还需要事先为期添加 Nginx 服务的对应配置。
(1). 在 /usr/lib/systemd/system 目录下创建 nginx.service 配置文件,并粘贴以下内容:
text
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -tc /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
官方也提供了可供参考的
nginx.service
的样本:www.nginx.com/resources/w...
(2). 使用系统服务命令管理 Nginx 服务
bash
systemctl enable nginx # 设置 Nginx 服务开机启动
systemctl start nginx # 启动 Nginx 服务
systemctl stop nginx # 关闭 Nginx 服务
systemctl restart nginx # 重启 Nginx 服务
systemctl reload nginx # 重新加载 Nginx 配置文件
systemctl status nginx # 查看 nginx 服务的状态与进程。
text
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (**running**) since Sat 2023-04-08 11:32:01 CST; 7s ago
Process: 2871 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 2867 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 2865 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
**Main PID: 2873 (nginx)**
CGroup: /system.slice/nginx.service
**├─2873 nginx: master process /usr/sbin/nginx
├─2874 nginx: worker process
└─2875 nginx: worker process**
可以看到 Nginx 服务是由一个主进程(控制进程)与两个 Worker 进程运行的。
systemctl
命令是Systemd
工具的核心命令,主要用于管理程序的启动、关闭等。
使用 Kill 命令管理
首先,使用 ps
+ grep
命令查看当前 Nginx 服务所有进程的 PID
bash
ps -ef|grep nginx
# ------------------------------------
root 3030 1 0 11:41 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 3031 3030 0 11:41 ? 00:00:00 nginx: worker process
nginx 3032 3030 0 11:41 ? 00:00:00 nginx: worker process
也可以通过安装目录中的 nginx.pid
文件进行查看
bash
cat /usr/local/nginx/logs/nginx.pd
3030
然后使用 kill -signal pid
命令方式来操作 Nignx 服务。
Signal | 说明 | 对应命令 |
---|---|---|
TERM | 立即关闭 Nginx 服务 | nginx -s stop |
QUIT | 优雅关闭 Nginx 服务 | nginx -s quit |
WINCH | 优雅关闭 Work 进程 | - |
HUP | 重读配置文件并重启服务 | nginx -s reload |
USR1 | 重新打开(生成)日志文件, | |
如要用于日志分割需求 | ||
USR2 | 保留之前的master 进程与 work 进程,然后重新启动一个服务。 | |
主要用于 Nginx 的平滑升级 |
Example:
bash
kill -TERM 3030
Kill -QUIT `more /usr/local/nginx/logs/nginx.pd`
⚠️ 非常不建议直接通过
kill
命令 + 进程号的方式来管理 Nginx 服务,只推荐在升级、回滚等场合使用。