一、系统服务管理(systemctl)
# 启动 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 restart nginx --no-pager
二、配置测试与检查
# 测试配置文件语法
sudo nginx -t
# 测试配置并显示详细信息
sudo nginx -T
# 检查默认配置文件路径
sudo nginx -t 2>&1 | grep "configuration file"
# 验证特定配置文件
sudo nginx -t -c /path/to/nginx.conf
三、信号控制(直接发送信号)
# 重新加载配置(等同于 systemctl reload)
sudo nginx -s reload
# 快速关闭 Nginx
sudo nginx -s stop
# 优雅关闭 Nginx(等待当前请求处理完成)
sudo nginx -s quit
# 重新打开日志文件(日志切割后使用)
sudo nginx -s reopen
四、日志查看
# 查看访问日志
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
# 查看最后 100 行错误日志
sudo tail -n 100 /var/log/nginx/error.log
# 实时监控错误日志
sudo tail -f /var/log/nginx/error.log | grep --color=auto "error"
# 查看所有日志文件
ls -la /var/log/nginx/
# 日志切割
sudo logrotate -f /etc/logrotate.d/nginx
五、站点配置管理
# 查看启用的站点
ls -la /etc/nginx/sites-enabled/
# 查看可用的站点配置
ls -la /etc/nginx/sites-available/
# 启用站点(创建符号链接)
sudo ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/
# 禁用站点(删除符号链接)
sudo rm /etc/nginx/sites-enabled/mysite.com
# 编辑站点配置
sudo nano /etc/nginx/sites-available/mysite.com
# 编辑主配置文件
sudo nano /etc/nginx/nginx.conf
六、SSL 证书管理
# 查看证书内容
sudo openssl x509 -in /path/to/cert.pem -noout -text
# 查看证书有效期
sudo openssl x509 -in /path/to/cert.pem -noout -dates
# 查看证书主题
sudo openssl x509 -in /path/to/cert.pem -noout -subject
# 测试 SSL 配置
sudo nginx -t
# 检查 SSL 证书和私钥是否匹配
sudo openssl x509 -noout -modulus -in /path/to/cert.pem | sudo openssl md5
sudo openssl rsa -noout -modulus -in /path/to/key.pem | sudo openssl md5
七、性能监控
# 查看 Nginx 进程
ps aux | grep nginx
# 查看 Nginx 监听的端口
sudo netstat -tlnp | grep nginx
sudo ss -tlnp | grep nginx
# 查看 Nginx 连接数
sudo netstat -an | grep :80 | wc -l
# 实时监控连接状态
sudo watch -n 1 'netstat -an | grep :80 | awk '{print $6}' | sort | uniq -c'
# 查看请求统计(需要 stub_status 模块)
curl http://localhost/nginx_status
八、故障排查
# 检查配置文件错误详情
sudo nginx -t
# 查看详细错误日志
sudo tail -100 /var/log/nginx/error.log
# 检查端口占用
sudo lsof -i :80
sudo lsof -i :443
# 检查防火墙状态
sudo ufw status
# 测试配置文件包含路径
sudo nginx -T | grep "include"
# 检查文件权限
ls -la /var/log/nginx/
ls -la /etc/nginx/
# 测试反向代理连接
curl -I http://localhost
curl -I https://localhost
九、访问控制与安全
# 查看当前 IP 连接数
sudo netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
# 查看最活跃的 IP 地址
sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
# 封禁 IP(在配置文件中添加)
# 在 server 块中添加:
# deny 192.168.1.1;
# deny 192.168.1.0/24;
# 查看请求最多的 URL
sudo awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
# 查看 HTTP 状态码分布
sudo awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
十、缓存管理
# 清除 Nginx 缓存
sudo rm -rf /var/cache/nginx/*
# 查看缓存目录大小
sudo du -sh /var/cache/nginx/
# 重新创建缓存目录
sudo mkdir -p /var/cache/nginx/
sudo chown -R nginx:nginx /var/cache/nginx/
十一、Docker 容器中的 Nginx
# 查看容器内 Nginx 状态
docker exec <容器名> nginx -t
# 重启容器内 Nginx
docker exec <容器名> nginx -s reload
# 查看容器内日志
docker logs <容器名>
# 进入容器调试
docker exec -it <容器名> bash
# 复制配置文件到容器
docker cp nginx.conf <容器名>:/etc/nginx/nginx.conf
# 从容器复制配置文件
docker cp <容器名>:/etc/nginx/nginx.conf ./nginx.conf
十二、常用配置示例
反向代理配置
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
静态文件服务
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
# 启用 gzip 压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript;
}
HTTPS 配置
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/certs/fullchain.pem;
ssl_certificate_key /etc/ssl/certs/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://127.0.0.1:8000;
}
}
十三、快速参考
命令 | 说明 |
|---|
sudo systemctl start nginx
| 启动 |
sudo systemctl stop nginx
| 停止 |
sudo systemctl restart nginx
| 重启 |
sudo systemctl reload nginx
| 平滑重载 |
sudo systemctl status nginx
| 查看状态 |
sudo nginx -t
| 测试配置 |
sudo nginx -s reload
| 信号重载 |
sudo tail -f /var/log/nginx/error.log
| 查看错误日志 |
sudo ln -s /etc/nginx/sites-available/x /etc/nginx/sites-enabled/
| 启用站点 |
sudo rm /etc/nginx/sites-enabled/x
| 禁用站点 |