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

相关推荐
LunarCod10 分钟前
WorkFlow源码剖析——Communicator之TCPServer(中)
后端·workflow·c/c++·网络框架·源码剖析·高性能高并发
神仙别闹11 分钟前
基于tensorflow和flask的本地图片库web图片搜索引擎
前端·flask·tensorflow
码农派大星。41 分钟前
Spring Boot 配置文件
java·spring boot·后端
GIS程序媛—椰子1 小时前
【Vue 全家桶】7、Vue UI组件库(更新中)
前端·vue.js
DogEgg_0011 小时前
前端八股文(一)HTML 持续更新中。。。
前端·html
ZL不懂前端1 小时前
Content Security Policy (CSP)
前端·javascript·面试
木舟10091 小时前
ffmpeg重复回听音频流,时长叠加问题
前端
杜杜的man1 小时前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*1 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
llllinuuu1 小时前
Go语言结构体、方法与接口
开发语言·后端·golang