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
工作原理:
- Master进程检查新配置语法
- 如果正确,启动新的Worker进程
- 旧Worker进程处理完当前请求后退出
- 新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
十五、总结 #
本章我们学习了:
- 启动命令:直接启动、指定配置启动
- 停止命令:快速停止、优雅停止
- 重载配置:平滑重载、信号机制
- 测试配置:语法检查、配置验证
- 日志管理:重新打开日志、日志切割
- 版本信息:查看版本和编译参数
- 进程管理:查看进程、连接状态
- 平滑升级:不停机升级Nginx
掌握这些命令后,让我们进入下一章,学习Nginx的核心功能!
最后更新:2026-03-27