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