03 × 运行配置

专栏 ➡️ 跟我一起学 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 服务,只推荐在升级、回滚等场合使用。

相关推荐
gqkmiss23 分钟前
Chrome 浏览器插件获取网页 iframe 中的 window 对象
前端·chrome·iframe·postmessage·chrome 插件
m0_748247552 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
刘大辉在路上3 小时前
突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除
git·后端·gitlab·版本管理·源代码管理
m0_748255023 小时前
前端常用算法集合
前端·算法
真的很上进3 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
web130933203983 小时前
vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法
前端·vue.js·elementui
NiNg_1_2344 小时前
Echarts连接数据库,实时绘制图表详解
前端·数据库·echarts
如若1234 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python
追逐时光者4 小时前
免费、简单、直观的数据库设计工具和 SQL 生成器
后端·mysql