Nginx基本命令 #

一、命令概述 #

Nginx提供了丰富的命令行选项,用于控制服务和管理配置。命令格式如下:

bash
nginx [选项]
nginx -s [信号]

二、常用命令速查 #

命令 说明
nginx 启动Nginx
nginx -s stop 快速停止
nginx -s quit 优雅停止
nginx -s reload 重载配置
nginx -s reopen 重新打开日志
nginx -t 测试配置
nginx -V 显示版本和编译参数
nginx -h 显示帮助信息

三、启动Nginx #

3.1 直接启动 #

bash
nginx

3.2 指定配置文件启动 #

bash
nginx -c /etc/nginx/nginx.conf

3.3 使用systemd启动 #

bash
sudo systemctl start nginx

3.4 使用service启动 #

bash
sudo service nginx start

3.5 使用Homebrew启动(macOS) #

bash
brew services start nginx

四、停止Nginx #

4.1 快速停止(stop) #

立即停止Nginx,不等待请求处理完成:

bash
nginx -s stop

4.2 优雅停止(quit) #

等待当前请求处理完成后停止:

bash
nginx -s quit

4.3 使用systemd停止 #

bash
sudo systemctl stop nginx

4.4 使用kill命令 #

bash
kill -QUIT $(cat /var/run/nginx.pid)
kill -TERM $(cat /var/run/nginx.pid)
kill -9 $(cat /var/run/nginx.pid)

4.5 停止信号对比 #

信号 说明 使用场景
QUIT 优雅停止 正常维护
TERM 快速停止 紧急停止
KILL 强制停止 无响应时
INT 快速停止 Ctrl+C

五、重载配置 #

5.1 平滑重载 #

不停止服务的情况下重新加载配置:

bash
nginx -s reload

工作原理:

  1. Master进程检查新配置语法
  2. 如果正确,启动新的Worker进程
  3. 旧Worker进程处理完当前请求后退出
  4. 新Worker进程开始处理新请求

5.2 使用systemd重载 #

bash
sudo systemctl reload nginx

5.3 使用kill发送信号 #

bash
kill -HUP $(cat /var/run/nginx.pid)

5.4 重载注意事项 #

  • 配置语法错误时不会重载
  • 已建立的连接不受影响
  • 新连接使用新配置

六、测试配置 #

6.1 测试默认配置 #

bash
nginx -t

6.2 测试指定配置文件 #

bash
nginx -t -c /etc/nginx/nginx.conf

6.3 测试并显示配置 #

bash
nginx -T

6.4 输出示例 #

成功:

text
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

失败:

text
nginx: [emerg] unknown directive "servername" in /etc/nginx/nginx.conf:35
nginx: configuration file /etc/nginx/nginx.conf test failed

七、日志管理 #

7.1 重新打开日志文件 #

用于日志切割后重新打开日志文件:

bash
nginx -s reopen

7.2 使用kill发送信号 #

bash
kill -USR1 $(cat /var/run/nginx.pid)

7.3 日志切割脚本 #

bash
#!/bin/bash
LOG_DIR="/var/log/nginx"
DATE=$(date +%Y%m%d)

mv $LOG_DIR/access.log $LOG_DIR/access.$DATE.log
mv $LOG_DIR/error.log $LOG_DIR/error.$DATE.log

nginx -s reopen

find $LOG_DIR -name "*.log" -mtime +30 -delete

7.4 使用logrotate #

创建 /etc/logrotate.d/nginx

text
/var/log/nginx/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 0640 nginx adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
    endscript
}

八、版本与编译信息 #

8.1 查看版本 #

bash
nginx -v

输出:

text
nginx version: nginx/1.24.0

8.2 查看编译参数 #

bash
nginx -V

输出:

text
nginx version: nginx/1.24.0
built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
built with OpenSSL 1.1.1f  31 Mar 2020
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx 
--modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf 
--error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log 
--pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock ...

8.3 编译参数说明 #

参数 说明
–prefix 安装目录
–sbin-path 可执行文件路径
–conf-path 配置文件路径
–error-log-path 错误日志路径
–http-log-path 访问日志路径
–with-http_ssl_module SSL模块
–with-http_v2_module HTTP/2模块

九、进程管理 #

9.1 查看Nginx进程 #

bash
ps aux | grep nginx

输出:

text
root      1234  0.0  0.1  nginx: master process /usr/sbin/nginx
nginx     1235  0.0  0.2  nginx: worker process
nginx     1236  0.0  0.2  nginx: worker process
nginx     1237  0.0  0.2  nginx: worker process
nginx     1238  0.0  0.2  nginx: worker process

9.2 查看进程树 #

bash
pstree -p | grep nginx

9.3 查看连接数 #

bash
ss -tlnp | grep nginx
netstat -tlnp | grep nginx

9.4 查看状态 #

bash
sudo systemctl status nginx

十、平滑升级 #

10.1 升级步骤 #

bash
cp /usr/sbin/nginx /usr/sbin/nginx.old

cp objs/nginx /usr/sbin/nginx

kill -USR2 $(cat /var/run/nginx.pid)

kill -WINCH $(cat /var/run/nginx.pid.oldbin)

kill -QUIT $(cat /var/run/nginx.pid.oldbin)

10.2 回滚操作 #

bash
kill -HUP $(cat /var/run/nginx.pid.oldbin)
kill -QUIT $(cat /var/run/nginx.pid)
cp /usr/sbin/nginx.old /usr/sbin/nginx

十一、Systemd服务管理 #

11.1 常用systemctl命令 #

bash
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo systemctl status nginx
sudo systemctl enable nginx
sudo systemctl disable nginx
sudo systemctl is-enabled nginx
sudo systemctl is-active nginx

11.2 查看服务日志 #

bash
sudo journalctl -u nginx
sudo journalctl -u nginx -f
sudo journalctl -u nginx --since today
sudo journalctl -u nginx --since "2024-01-01"

十二、信号详解 #

Nginx支持以下信号:

信号 命令 说明
QUIT nginx -s quit 优雅停止
TERM/INT nginx -s stop 快速停止
HUP nginx -s reload 重载配置
USR1 nginx -s reopen 重新打开日志
USR2 - 平滑升级
WINCH - 优雅停止Worker

12.1 发送信号示例 #

bash
kill -QUIT $(cat /var/run/nginx.pid)
kill -HUP $(cat /var/run/nginx.pid)
kill -USR1 $(cat /var/run/nginx.pid)
kill -USR2 $(cat /var/run/nginx.pid)

十三、监控命令 #

13.1 查看连接状态 #

nginx
location /nginx_status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    deny all;
}
bash
curl http://127.0.0.1/nginx_status

输出:

text
Active connections: 10
server accepts handled requests
 100 100 200
Reading: 0 Writing: 1 Waiting: 9

13.2 状态说明 #

字段 说明
Active connections 当前活跃连接数
accepts 总接受连接数
handled 总处理连接数
requests 总请求数
Reading 读取请求头的连接数
Writing 响应客户端的连接数
Waiting 等待请求的连接数

十四、常用脚本 #

14.1 重启脚本 #

bash
#!/bin/bash
nginx -t && nginx -s reload

14.2 健康检查脚本 #

bash
#!/bin/bash
if ! pgrep -x nginx > /dev/null; then
    echo "Nginx is not running, starting..."
    systemctl start nginx
fi

14.3 配置备份脚本 #

bash
#!/bin/bash
BACKUP_DIR="/backup/nginx"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/nginx_$DATE.tar.gz /etc/nginx
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete

十五、总结 #

本章我们学习了:

  1. 启动命令:直接启动、指定配置启动
  2. 停止命令:快速停止、优雅停止
  3. 重载配置:平滑重载、信号机制
  4. 测试配置:语法检查、配置验证
  5. 日志管理:重新打开日志、日志切割
  6. 版本信息:查看版本和编译参数
  7. 进程管理:查看进程、连接状态
  8. 平滑升级:不停机升级Nginx

掌握这些命令后,让我们进入下一章,学习Nginx的核心功能!

最后更新:2026-03-27