Nginx 基本命令
Nginx 常用命令详解
📋 目录
服务管理
Systemd 命令(推荐)
# 启动 Nginx
sudo systemctl start nginx
# 停止 Nginx
sudo systemctl stop nginx
# 重启 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 show nginxInit.d 命令(旧系统)
# 启动
sudo service nginx start
# 停止
sudo service nginx stop
# 重启
sudo service nginx restart
# 重载配置
sudo service nginx reload
# 查看状态
sudo service nginx statusNginx 命令直接控制
# 启动 Nginx(需要指定配置文件)
sudo nginx -c /etc/nginx/nginx.conf
# 快速停止(强制)
sudo nginx -s stop
# 优雅停止(处理完当前请求)
sudo nginx -s quit
# 重载配置
sudo nginx -s reload
# 重新打开日志文件
sudo nginx -s reopen
# 测试配置
sudo nginx -t
# 测试配置并显示配置文件路径
sudo nginx -T配置检查
检查配置文件语法
# 基本语法检查
sudo nginx -t
# 示例输出
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful显示配置信息
# 显示配置文件路径和内容
sudo nginx -T
# 示例输出
# configuration file /etc/nginx/nginx.conf:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
# ... 所有配置内容
# 仅显示配置文件路径
sudo nginx -t 2>&1 | grep configuration
# 查找特定配置
sudo nginx -T | grep server_name检查指定配置文件
# 检查自定义配置文件
sudo nginx -t -c /path/to/custom/nginx.conf
# 检查并显示详细信息
sudo nginx -T -c /path/to/custom/nginx.conf信号控制
向 Nginx 进程发送信号
# 查找 Nginx master 进程 PID
cat /var/run/nginx.pid
# 或
ps aux | grep nginx | grep master
# 优雅停止(QUIT)
sudo kill -QUIT <master_pid>
sudo kill -QUIT $(cat /var/run/nginx.pid)
# 快速停止(TERM)
sudo kill -TERM <master_pid>
# 重载配置(HUP)
sudo kill -HUP <master_pid>
# 重新打开日志文件(USR1)
sudo kill -USR1 <master_pid>
# 平滑升级(USR2 + WINCH)
sudo kill -USR2 <master_pid> # 启动新 worker
sudo kill -WINCH <master_pid> # 优雅停止旧 worker信号说明
| 信号 | 名称 | 作用 |
|---|---|---|
TERM | 快速停止 | 立即终止进程 |
QUIT | 优雅停止 | 处理完当前请求后停止 |
HUP | 重载配置 | 重载配置文件,平滑重启 |
USR1 | 重新打开日志 | 用于日志切割 |
USR2 | 平滑升级 | 启动新的 master 进程 |
WINCH | 优雅停止 worker | 配合 USR2 使用 |
日志管理
查看日志
# 查看访问日志
sudo tail -f /var/log/nginx/access.log
# 查看错误日志
sudo tail -f /var/log/nginx/error.log
# 查看最后 100 行
sudo tail -n 100 /var/log/nginx/access.log
# 查看指定时间段的日志
sudo grep "2024-01-01" /var/log/nginx/access.log
# 统计访问次数
sudo wc -l /var/log/nginx/access.log
# 按 IP 统计
sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20日志切割
# 创建日志切割脚本
sudo cat > /usr/local/bin/nginx-logrotate.sh << 'EOF'
#!/bin/bash
LOG_DIR="/var/log/nginx"
DATE=$(date +%Y%m%d)
# 重命名日志文件
mv ${LOG_DIR}/access.log ${LOG_DIR}/access.log.${DATE}
mv ${LOG_DIR}/error.log ${LOG_DIR}/error.log.${DATE}
# 重新打开日志文件
kill -USR1 $(cat /var/run/nginx.pid)
# 压缩旧日志(可选)
gzip ${LOG_DIR}/access.log.${DATE}
gzip ${LOG_DIR}/error.log.${DATE}
# 删除 30 天前的日志
find ${LOG_DIR} -name "*.log.*" -mtime +30 -delete
EOF
# 添加执行权限
sudo chmod +x /usr/local/bin/nginx-logrotate.sh
# 添加到 crontab
crontab -e
# 添加以下内容,每天凌晨切割日志
0 0 * * * /usr/local/bin/nginx-logrotate.sh使用 logrotate(推荐)
# Ubuntu/Debian 已默认配置
ls /etc/logrotate.d/nginx
# 手动运行 logrotate
sudo logrotate -f /etc/logrotate.d/nginx
# 测试配置
sudo logrotate -d /etc/logrotate.d/nginx性能查看
查看 Nginx 进程
# 查看所有 Nginx 进程
ps aux | grep nginx
# 查看 master 进程
ps aux | grep nginx | grep master
# 查看 worker 进程
ps aux | grep nginx | grep worker
# 统计 worker 数量
ps aux | grep nginx | grep worker | wc -l查看连接数
# 查看 Nginx 连接数
netstat -anp | grep nginx | grep ESTABLISHED | wc -l
# 查看所有连接状态
netstat -anp | grep nginx | awk '{print $6}' | sort | uniq -c | sort -nr
# 使用 ss 命令(推荐)
ss -antp | grep nginx
# 查看每个 worker 的连接数
for pid in $(pgrep -f "nginx: worker"); do
echo "Worker PID: $pid"
ss -antp | grep $pid | wc -l
done查看内存使用
# 查看 Nginx 内存使用
ps aux | grep nginx | awk '{sum+=$6} END {print "Total Memory:", sum/1024, "MB"}'
# 查看单个进程内存
pmap -x $(cat /var/run/nginx.pid)
# 实时监控
top -p $(pgrep -f "nginx: master" | tr '\n' ',')性能统计
# 启用 stub_status 模块后访问
# 在 nginx.conf 中添加:
# location /nginx_status {
# stub_status on;
# access_log off;
# allow 127.0.0.1;
# deny all;
# }
curl http://localhost/nginx_status
# 输出示例:
# Active connections: 2
# server accepts handled requests
# 100 100 200
# Reading: 0 Writing: 1 Waiting: 1常用脚本
快速重启脚本
# 创建快速重启脚本
sudo cat > /usr/local/bin/nginx-restart << 'EOF'
#!/bin/bash
echo "正在检查 Nginx 配置..."
sudo nginx -t
if [ $? -eq 0 ]; then
echo "配置检查通过,正在重载..."
sudo systemctl reload nginx
echo "Nginx 重载完成"
else
echo "配置检查失败,请检查配置文件"
exit 1
fi
EOF
# 添加执行权限
sudo chmod +x /usr/local/bin/nginx-restart性能监控脚本
# 创建性能监控脚本
sudo cat > /usr/local/bin/nginx-monitor << 'EOF'
#!/bin/bash
echo "=== Nginx 性能监控 ==="
echo "时间: $(date)"
echo ""
echo "进程状态:"
ps aux | grep nginx | grep -v grep
echo ""
echo "连接统计:"
ss -antp | grep nginx | wc -l
echo ""
echo "内存使用:"
ps aux | grep nginx | grep -v grep | awk '{sum+=$6} END {print "Total Memory:", sum/1024, "MB"}'
echo ""
echo "工作进程数:"
ps aux | grep nginx | grep worker | wc -l
EOF
# 添加执行权限
sudo chmod +x /usr/local/bin/nginx-monitor配置备份脚本
# 创建配置备份脚本
sudo cat > /usr/local/bin/nginx-backup << 'EOF'
#!/bin/bash
BACKUP_DIR="/backup/nginx/$(date +%Y%m%d_%H%M%S)"
mkdir -p $BACKUP_DIR
# 备份配置文件
cp -r /etc/nginx/* $BACKUP_DIR/
# 打包压缩
tar -czf ${BACKUP_DIR}.tar.gz -C /backup/nginx $(basename $BACKUP_DIR)
rm -rf $BACKUP_DIR
echo "备份完成: ${BACKUP_DIR}.tar.gz"
EOF
# 添加执行权限
sudo chmod +x /usr/local/bin/nginx-backup🔧 故障排查命令
检查端口占用
# 检查 80 端口
sudo netstat -tulpn | grep :80
sudo lsof -i :80
# 检查 443 端口
sudo netstat -tulpn | grep :443
sudo lsof -i :443检查配置文件
# 检查语法
sudo nginx -t
# 查找配置文件
sudo nginx -t 2>&1 | grep configuration
# 查找 include 的文件
sudo grep -r "include" /etc/nginx/检查权限
# 检查 Nginx 运行用户
ps aux | grep nginx | grep master
# 检查网站目录权限
ls -la /var/www/html/
# 检查日志文件权限
ls -la /var/log/nginx/测试网络连接
# 测试本地连接
curl -I http://localhost
# 测试特定域名
curl -I http://example.com
# 测试 HTTPS
curl -I https://example.com
# 详细调试
curl -v http://localhost