温馨提示×

Ubuntu上Nginx日志如何查看

小樊
38
2025-12-09 03:36:00
栏目: 智能运维

Ubuntu 上 Nginx 日志查看与排查指南

一 日志位置与类型

  • 默认日志目录:/var/log/nginx/
  • 常见日志文件:
    • 访问日志:/var/log/nginx/access.log
    • 错误日志:/var/log/nginx/error.log
  • 配置指令位置:主配置 /etc/nginx/nginx.conf,站点配置 /etc/nginx/sites-enabled/(日志路径由 access_logerror_log 指令定义,若未显式设置,通常写入上述默认文件)

二 快速查看与检索

  • 实时查看访问日志与错误日志
    • 命令:sudo tail -f /var/log/nginx/access.logsudo tail -f /var/log/nginx/error.log
  • 按时间过滤
    • 示例:journalctl -u nginx --since "2025-12-09 00:00:00" --until "2025-12-09 12:00:00"
  • 按级别过滤
    • 示例:journalctl -u nginx -p err(仅显示错误级别)
  • 关键字检索
    • 示例:grep "404" /var/log/nginx/access.loggrep -i "permission denied" /var/log/nginx/error.log
  • 说明
    • 使用 tail -f 可实时跟踪新增日志
    • 使用 journalctl -u nginx 可查看由 systemd 管理的 Nginx 服务日志(适合排查启动失败、重启等)

三 多站点与自定义日志路径

  • 多站点可按虚拟主机拆分日志,便于定位问题
    • 示例配置:
      http {
        access_log /var/log/nginx/access.log;
        server {
          listen 80;
          server_name example.com;
          access_log /var/log/nginx/example.access.log;
          ...
        }
      }
      
  • 变更后检查并重载
    • 检查语法:sudo nginx -t
    • 重载配置:sudo systemctl reload nginx
  • 提示
    • 若未为某 server 指定 access_log,将沿用 http 层级或默认路径

四 日志分析与可视化

  • 高频访问与状态码统计
    • Top 10 IP:awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
    • Top 20 URL:awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
    • 状态码分布:awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
  • 使用 GoAccess 生成可视化报告
    • 安装:sudo apt install -y goaccess
    • 报告:goaccess /var/log/nginx/access.log --log-format=COMBINED -o /var/www/html/report.html
    • 实时 HTML:goaccess /var/log/nginx/access.log --log-format=COMBINED --real-time-html --port=7890 -o /var/www/html/realtime.html
  • 其他工具
    • 交互式查看:sudo apt install -y lnav && lnav /var/log/nginx/
    • 实时监控:sudo apt install -y ngxtop

五 日志轮转与常见问题排查

  • 日志轮转
    • 配置目录:/etc/logrotate.d/nginx
    • 作用:按日/周轮转、压缩、保留历史,避免单个日志过大
  • 排查清单
    • 配置语法:sudo nginx -t
    • 服务状态:sudo systemctl status nginx
    • 端口占用:sudo ss -tulnp | grep ':80\|:443'
    • 错误线索:优先查看 /var/log/nginx/error.logjournalctl -u nginx 的时间点与错误级别
  • 相关组件日志
    • PHP-FPM:常见路径 /var/log/php7.x-fpm.log/var/log/php-fpm/error.log(版本与发行版不同可能有所差异)
    • MySQL/MariaDB:/var/log/mysql/error.log
    • 系统日志:/var/log/syslog(可用于关联系统层面的事件)

0