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 nginx

Init.d 命令(旧系统)

# 启动
sudo service nginx start
 
# 停止
sudo service nginx stop
 
# 重启
sudo service nginx restart
 
# 重载配置
sudo service nginx reload
 
# 查看状态
sudo service nginx status

Nginx 命令直接控制

# 启动 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

📚 相关链接


标签: nginx 命令 运维 管理