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 服务,只推荐在升级、回滚等场合使用。

相关推荐
狗头大军之江苏分军23 分钟前
《潮水漫过十七岁》开学了
后端
苏三说技术1 小时前
如何看待GPT-6在UP主众测中碾压夺冠?它是现在最强大模型吗?
后端
mldong1 小时前
一份 JSON,一条能跑的审批流:把报销流程送上工作流引擎
后端·架构
wno7041 小时前
Spring Boot WebFlux增删改查
java·spring boot·后端
Captaincc1 小时前
AI用量v0.1.11更新发布 新增 jusage doctor 诊断指令 托盘展示token 和余额 新增 AutoClaw 支持
前端·后端·vibecoding
aramae2 小时前
模拟实现strlen()函数 (C语言)
c语言·开发语言·后端
计算机魔术师3 小时前
德国Wiki被黑后两周,OpenAI终于把模型失控的账本摊开了
前端
kyriewen3 小时前
我让 AI 当面试官面了我一轮:第 3 个追问我就卡住了(附 10 道追问清单)
前端·面试·ai编程
IT_陈寒3 小时前
Python的GIL把我坑惨了,多线程跑得比单线程还慢
前端·人工智能·后端
分支预测失败4 小时前
RISC-V 时间子系统深度专题:mtime 访问路径、SBI 定时器与 Linux tickless 协同
后端