Nginx 常用命令速查表

Nginx 常用命令速查表

1. 版本与基础信息

命令 说明
nginx -v 查看 Nginx 版本号(简短)
nginx -V 查看 Nginx 详细版本信息(包括编译参数、模块)
nginx -h 查看帮助信息
nginx -t 测试配置文件语法是否正确
nginx -T 测试配置文件并输出完整配置(包括包含的文件)
nginx -q 测试配置文件时仅显示错误信息

2. 启动与停止

命令 说明
nginx 启动 Nginx(使用默认配置文件)
nginx -c <配置文件路径> 使用指定配置文件启动
nginx -s stop 快速停止(立即终止进程)
nginx -s quit 优雅停止(处理完当前请求后退出)
nginx -s reload 重新加载配置文件(热重载,不中断服务)
nginx -s reopen 重新打开日志文件(常用于日志切割)
nginx -s quit && nginx 重启 Nginx(先优雅停止,再启动)
pkill nginx 强制终止所有 Nginx 进程
killall nginx 终止所有 Nginx 进程

3. 进程管理

命令 说明
ps aux | grep nginx 查看 Nginx 进程
ps -ef | grep nginx 查看 Nginx 进程(另一种格式)
systemctl start nginx 使用 systemd 启动 Nginx(Linux)
systemctl stop nginx 使用 systemd 停止 Nginx
systemctl restart nginx 使用 systemd 重启 Nginx
systemctl reload nginx 使用 systemd 重新加载配置
systemctl status nginx 查看 Nginx 服务状态
systemctl enable nginx 设置 Nginx 开机自启
systemctl disable nginx 取消 Nginx 开机自启
service nginx start 使用 service 启动 Nginx(旧版系统)
service nginx stop 使用 service 停止 Nginx
service nginx restart 使用 service 重启 Nginx
service nginx reload 使用 service 重新加载配置
service nginx status 查看 Nginx 服务状态

4. 信号控制

命令 说明
kill -QUIT <主进程PID> 优雅停止(等同于 nginx -s quit
kill -TERM <主进程PID> 快速停止(等同于 nginx -s stop
kill -HUP <主进程PID> 重新加载配置(等同于 nginx -s reload
kill -USR1 <主进程PID> 重新打开日志文件
kill -USR2 <主进程PID> 平滑升级可执行文件(配合 WINCH
kill -WINCH <主进程PID> 优雅关闭工作进程
cat /var/run/nginx.pid 查看 Nginx 主进程 PID

5. 配置文件管理

5.1 常见配置文件路径

路径 说明
/etc/nginx/nginx.conf 主配置文件(Linux 默认)
/etc/nginx/conf.d/ 额外配置文件目录
/etc/nginx/sites-available/ 可用站点配置(Debian/Ubuntu)
/etc/nginx/sites-enabled/ 已启用站点配置(Debian/Ubuntu)
/usr/local/nginx/conf/nginx.conf 源码编译安装默认路径
/usr/local/etc/nginx/nginx.conf macOS(Homebrew)默认路径
/var/log/nginx/access.log 访问日志默认路径
/var/log/nginx/error.log 错误日志默认路径

5.2 配置文件操作

命令 说明
nginx -t -c <配置文件路径> 测试指定配置文件
nginx -T -c <配置文件路径> 测试并输出指定配置
mkdir -p /etc/nginx/conf.d 创建配置文件目录
ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/ 启用站点(Debian/Ubuntu)

6. 日志管理

6.1 日志查看

命令 说明
tail -f /var/log/nginx/access.log 实时查看访问日志
tail -f /var/log/nginx/error.log 实时查看错误日志
tail -100 /var/log/nginx/access.log 查看最后 100 行访问日志
grep "404" /var/log/nginx/access.log 搜索包含 404 的请求
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr 统计访问 IP 并排序
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20 统计访问最多的 URL

6.2 日志切割

命令 说明
mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +%Y%m%d) 手动切割访问日志
nginx -s reopen 重新打开日志文件(切割后执行)
logrotate /etc/logrotate.d/nginx 使用 logrotate 进行日志轮转
cat /etc/logrotate.d/nginx 查看 logrotate 配置

7. 性能监控与调试

命令 说明
nginx -s status 查看状态(需编译 stub_status 模块)
curl http://localhost/nginx_status 通过状态页查看统计信息
ab -n 1000 -c 100 http://localhost/ 使用 Apache Bench 进行压力测试
wrk -t12 -c400 -d30s http://localhost/ 使用 wrk 进行压力测试
htop 实时查看 Nginx 进程资源占用
lsof -i :80 查看 80 端口监听情况
netstat -tlnp | grep nginx 查看 Nginx 监听端口
ss -tlnp | grep nginx 查看 Nginx 监听端口(ss 命令)

8. SSL/TLS 证书管理

8.1 证书查看

命令 说明
openssl x509 -in /path/to/cert.pem -text -noout 查看证书详细信息
openssl x509 -in /path/to/cert.pem -dates -noout 查看证书有效期
openssl s_client -connect example.com:443 -servername example.com 测试 SSL 连接
curl -I https://example.com 测试 HTTPS 访问
curl -v https://example.com 查看详细 SSL 握手信息

8.2 证书生成

命令 说明
openssl req -new -newkey rsa:2048 -nodes -keyout example.key -out example.csr 生成私钥和 CSR
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 生成自签名证书
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048 生成 DH 参数(增强安全性)

8.3 Let's Encrypt

命令 说明
certbot --nginx -d example.com -d www.example.com 使用 Certbot 申请 SSL 证书
certbot renew --dry-run 测试证书续期
certbot renew 手动续期证书
certbot certificates 查看已申请的证书

9. 缓存管理

命令 说明
rm -rf /var/cache/nginx/* 清理 Nginx 缓存
nginx -s reload 重载配置后缓存目录会自动重建
curl -I -H "Cache-Control: no-cache" http://example.com 测试缓存绕过
`cat /var/cache/nginx// grep -a "HTTP/1.1"`

10. 反向代理与负载均衡

10.1 常见检查命令

命令 说明
curl -H "Host: example.com" http://localhost 测试虚拟主机配置
curl -x http://localhost:8080 http://example.com 测试代理配置
curl -I http://localhost/health 检查健康检查端点
nginx -t 修改 upstream 后测试配置

10.2 负载均衡测试

命令 说明
for i in {1..10}; do curl http://localhost/; done 循环请求测试负载均衡
curl -s http://localhost/ | grep "backend" 查看响应来源后端

11. 常用配置检查命令

命令 说明
nginx -T 2>&1 | grep -i error 查看配置中的错误
nginx -T 2>&1 | grep -i warning 查看配置中的警告
grep -r "include" /etc/nginx/ 查找配置文件中的 include 语句
find /etc/nginx/ -name "*.conf" 查找所有配置文件
grep -r "listen" /etc/nginx/ 查找所有监听端口配置
grep -r "server_name" /etc/nginx/ 查找所有虚拟主机配置

12. 模块管理

12.1 查看已编译模块

命令 说明
nginx -V 2>&1 | grep -o '\-\-with-.\+' 列出所有编译时启用的模块
nginx -V 2>&1 | grep -o '\-\-with-http_ssl_module' 检查是否启用 SSL 模块
nginx -V 2>&1 | grep -o '\-\-with-http_stub_status_module' 检查是否启用状态模块
nginx -V 2>&1 | grep -o '\-\-with-http_realip_module' 检查是否启用真实 IP 模块

12.2 动态模块管理

命令 说明
ls /etc/nginx/modules/ 查看动态模块目录
grep "load_module" /etc/nginx/nginx.conf 查看已加载的动态模块

13. 故障排查命令

命令 说明
nginx -t 测试配置文件(最常用)
tail -f /var/log/nginx/error.log 实时监控错误日志
curl -I http://localhost 测试本地响应
curl -v http://localhost 查看详细请求响应过程
telnet localhost 80 测试端口连通性
strace -p <PID> 跟踪 Nginx 进程系统调用
tcpdump -i any port 80 -n 抓取 80 端口网络包
lsof -p <PID> 查看进程打开的文件

14. 常用别名配置

# 建议添加到 ~/.bashrc 或 ~/.zshrc
alias nginxstart='sudo systemctl start nginx'
alias nginxstop='sudo systemctl stop nginx'
alias nginxreload='sudo systemctl reload nginx'
alias nginxrestart='sudo systemctl restart nginx'
alias nginxstatus='sudo systemctl status nginx'
alias nginxt='sudo nginx -t'
alias nginxlog='sudo tail -f /var/log/nginx/access.log'
alias nginxerr='sudo tail -f /var/log/nginx/error.log'
alias nginxconf='sudo vim /etc/nginx/nginx.conf'
alias nginxreloadconf='sudo nginx -t && sudo nginx -s reload'

15. 命令自动补全

# bash 自动补全(需要 bash-completion)
# 对于 systemd 管理的服务
complete -F _service nginx

# 或使用以下命令生成补全
echo "complete -F _service nginx" >> ~/.bashrc
source ~/.bashrc

16. 常见场景示例

16.1 配置修改后热重载

# 1. 测试配置文件
sudo nginx -t

# 2. 如果测试通过,执行热重载
sudo nginx -s reload

# 或使用 systemd
sudo systemctl reload nginx

16.2 优雅停止 Nginx

# 1. 等待当前请求处理完成
sudo nginx -s quit

# 2. 查看进程是否还在
ps aux | grep nginx

# 3. 确认所有连接关闭后进程退出

16.3 日志切割脚本

#!/bin/bash
# nginx 日志切割脚本

# 定义日志路径
LOG_PATH="/var/log/nginx"
YESTERDAY=$(date -d "yesterday" +%Y%m%d)

# 移动日志文件
mv ${LOG_PATH}/access.log ${LOG_PATH}/access_${YESTERDAY}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error_${YESTERDAY}.log

# 重新打开日志文件
nginx -s reopen

# 压缩旧日志(可选)
gzip ${LOG_PATH}/access_${YESTERDAY}.log
gzip ${LOG_PATH}/error_${YESTERDAY}.log

# 删除 30 天前的日志(可选)
find ${LOG_PATH} -name "*.log.gz" -mtime +30 -delete

16.4 SSL 证书续期脚本

#!/bin/bash
# Let's Encrypt 证书自动续期

# 停止 Nginx(如果占用了 80/443 端口)
systemctl stop nginx

# 执行续期
certbot renew --quiet

# 启动 Nginx
systemctl start nginx

# 重载配置
systemctl reload nginx

16.5 查看 Nginx 并发连接数

# 查看当前连接数
netstat -an | grep :80 | wc -l

# 查看各状态连接数
netstat -an | grep :80 | awk '{print $6}' | sort | uniq -c

# 使用 nginx status 模块(需开启)
curl http://localhost/nginx_status

16.6 备份 Nginx 配置

# 备份配置文件
sudo tar -czf nginx_backup_$(date +%Y%m%d).tar.gz /etc/nginx/

# 恢复配置
sudo tar -xzf nginx_backup_20240101.tar.gz -C /
sudo nginx -t && sudo nginx -s reload

16.7 配置语法高亮(vim)

# 启用 nginx 配置语法高亮
# 创建 vim 语法目录
mkdir -p ~/.vim/syntax

# 下载 nginx 语法文件
wget -O ~/.vim/syntax/nginx.vim \
  https://raw.githubusercontent.com/evanmiller/nginx-vim-syntax/master/nginx.vim

# 在 ~/.vimrc 中添加
echo "au BufRead,BufNewFile /etc/nginx/* set ft=nginx" >> ~/.vimrc

17. Nginx 常用配置参数速查


配置项 说明
worker_processes auto; 工作进程数(通常设为 CPU 核心数)
worker_connections 1024; 每个工作进程最大连接数
keepalive_timeout 65; 长连接超时时间
client_max_body_size 10m; 客户端请求体最大大小
access_log /var/log/nginx/access.log main; 访问日志路径和格式
error_log /var/log/nginx/error.log warn; 错误日志路径和级别
gzip on; 启用 gzip 压缩
ssl_protocols TLSv1.2 TLSv1.3; SSL/TLS 协议版本
ssl_ciphers HIGH:!aNULL:!MD5; SSL 加密套件
proxy_pass http://backend; 反向代理地址
proxy_set_header Host $host; 设置代理请求头
proxy_set_header X-Real-IP $remote_addr; 传递真实 IP
index index.html index.htm; 默认索引文件
try_files $uri $uri/ =404; 文件查找规则

18. Nginx 日志格式示例

# 在 http 块中定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';

# JSON 格式日志
log_format json escape=json '{'
    '"time_local":"$time_local",'
    '"remote_addr":"$remote_addr",'
    '"request":"$request",'
    '"status":$status,'
    '"body_bytes_sent":$body_bytes_sent,'
    '"request_time":$request_time,'
    '"http_referrer":"$http_referer",'
    '"http_user_agent":"$http_user_agent"'
'}';

19. 常见问题排查

问题现象 排查命令
配置修改后不生效 sudo nginx -t && sudo nginx -s reload
502 Bad Gateway tail -f /var/log/nginx/error.log,检查 upstream 后端
504 Gateway Timeout 检查 proxy_read_timeout 配置,后端响应时间
权限拒绝(13: Permission denied) 检查文件/目录权限,SELinux 状态
端口被占用 `netstat -tlnp
无法启动 nginx -t 检查配置,查看 error.log
SSL 证书错误 openssl s_client -connect localhost:443
慢请求排查 查看 access.log 中 request_time 字段

20. 性能优化命令

# 查看系统最大文件描述符数
ulimit -n

# 临时增加最大文件描述符
ulimit -n 65535

# 查看 Nginx 工作进程数
ps aux | grep "nginx: worker" | wc -l

# 查看 Nginx 连接数统计
curl http://localhost/nginx_status

# 查看系统 TCP 连接状态
ss -s

# 查看 Nginx 进程内存占用
ps aux | grep nginx | awk '{sum+=$6} END {print sum/1024 "MB"}'

# 查看系统负载
uptime

21. Nginx 版本升级

# 1. 查看当前版本
nginx -v

# 2. 备份旧版本和配置
sudo cp /usr/sbin/nginx /usr/sbin/nginx.bak
sudo cp -r /etc/nginx /etc/nginx.bak

# 3. 平滑升级(编译安装)
# 编译新版本
./configure --prefix=/usr/local/nginx
make
# 备份旧二进制文件
sudo mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
# 复制新二进制文件
sudo cp objs/nginx /usr/local/nginx/sbin/nginx
# 发送 USR2 信号
sudo kill -USR2 $(cat /var/run/nginx.pid)
# 发送 WINCH 信号关闭旧进程
sudo kill -WINCH $(cat /var/run/nginx.pid.oldbin)

# 4. 使用包管理器升级(Debian/Ubuntu)
sudo apt update && sudo apt upgrade nginx

# 5. 使用包管理器升级(CentOS/RHEL)
sudo yum update nginx
posted @ 2026-03-26 11:49  阿宝叔  阅读(113)  评论(0)    收藏  举报