【Nginx 入门】8、Nginx 日志管理

【Nginx 入门】Nginx 日志管理


系列文章目录

【Nginx 入门】1、Nginx 简介
【Nginx 入门】2、Nginx 安装与基本配置
【Nginx 入门】3、Nginx 基本命令
【Nginx 入门】4、Nginx 配置语法
【Nginx 入门】5、Nginx 处理请求的流程
【Nginx 入门】6、Nginx 反向代理
【Nginx 入门】7、静态文件服务
【Nginx 入门】8、Nginx 日志管理(本文)


日志管理是 Nginx 配置和维护中的一个重要部分。通过日志,管理员可以监控服务器的运行状态、分析访问情况、排查故障和优化性能。Nginx 提供了强大的日志功能,包括访问日志和错误日志。在本章中,我们将详细介绍 Nginx 的日志管理,帮助你掌握其配置和使用方法。

1. 日志类型

1.1 访问日志

访问日志记录了所有客户端对服务器的请求信息,包括请求的时间、客户端 IP 地址、请求 URI、响应状态码等。访问日志文件的默认位置通常是 /var/log/nginx/access.log

1.2 错误日志

错误日志记录了服务器运行过程中发生的错误和异常情况,包括启动、停止和运行时的错误信息。错误日志文件的默认位置通常是 /var/log/nginx/error.log

2. 配置日志

2.1 配置访问日志

访问日志可以在 httpserverlocation 块中配置。下面是一个配置示例:

http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;

    server {
        listen 80;
        server_name example.com;

        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
        }
    }
}

在这个配置中:

  • log_format 指令定义了日志格式,格式名为 main
  • access_log 指令指定了日志文件路径和使用的格式。

2.2 配置错误日志

错误日志可以在 httpserverlocationif 块中配置。下面是一个配置示例:

http {
    error_log /var/log/nginx/error.log warn;

    server {
        listen 80;
        server_name example.com;

        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
        }
    }
}

在这个配置中:

  • error_log 指令指定了错误日志文件路径和日志级别。

3. 日志格式

3.1 访问日志格式

log_format 指令允许你自定义访问日志的格式。下面是一些常用变量:

  • $remote_addr:客户端 IP 地址。
  • $remote_user:客户端用户名。
  • $time_local:请求时间和日期。
  • $request:请求的 URI 和 HTTP 方法。
  • $status:HTTP 响应状态码。
  • $body_bytes_sent:发送给客户端的字节数,不包括响应头。
  • $http_referer:HTTP Referer 头信息。
  • $http_user_agent:客户端的 User-Agent 信息。

示例:

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

3.2 错误日志级别

error_log 指令允许你设置日志记录的级别,级别从低到高依次为:

  • debug:记录调试信息。
  • info:记录一般信息。
  • notice:记录重要事件。
  • warn:记录警告信息。
  • error:记录错误信息。
  • crit:记录严重错误信息。
  • alert:记录需要立即处理的信息。
  • emerg:记录系统不可用的信息。

示例:

error_log /var/log/nginx/error.log warn;

4. 日志轮换

由于日志文件会不断增长,定期进行日志轮换(log rotation)是非常必要的。可以使用 logrotate 工具来自动管理 Nginx 的日志轮换。

4.1 配置 logrotate

首先,创建一个 Nginx 的 logrotate 配置文件,例如 /etc/logrotate.d/nginx

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

在这个配置中:

  • daily:每天轮换一次日志。
  • rotate 14:保留最近的 14 个日志文件。
  • compress:压缩轮换的日志文件。
  • delaycompress:延迟一天压缩日志文件。
  • notifempty:如果日志文件为空,则不进行轮换。
  • create 0640 www-data adm:创建新的日志文件,设置权限和所属用户组。
  • sharedscripts:共享脚本不会并行执行。
  • postrotateendscript:在日志文件轮换后,向 Nginx 主进程发送 USR1 信号,通知其重新打开日志文件。

4.2 手动轮换日志

你也可以手动轮换日志文件。首先向 Nginx 主进程发送 USR1 信号:

sudo kill -USR1 `cat /var/run/nginx.pid`

然后将现有的日志文件重命名并压缩:

mv /var/log/nginx/access.log /var/log/nginx/access.log.1
mv /var/log/nginx/error.log /var/log/nginx/error.log.1
gzip /var/log/nginx/access.log.1
gzip /var/log/nginx/error.log.1

5. 日志分析

Nginx 生成的日志文件可以用来分析网站的访问情况和性能。常用的日志分析工具包括:

5.1 goaccess

goaccess 是一个实时日志分析工具,可以生成详细的访问报告:

sudo apt install goaccess
goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED

5.2 awkgrep

你也可以使用 awkgrep 这些命令行工具来手动分析日志。例如,查找所有状态码为 404 的请求:

grep ' 404 ' /var/log/nginx/access.log | awk '{print $1, $7, $9}'

6. 示例配置

下面是一个完整的 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"';

    access_log /var/log/nginx/access.log main;

    error_log /var/log/nginx/error.log warn;

    server {
        listen 80;
        server_name example.com;

        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
        }
    }
}

在这个示例中:

  • 定义了自定义的访问日志格式 main
  • 指定了访问日志和错误日志的文件路径和格式。
  • 配置了基本的静态文件服务。

7. 总结

在本章中,我们详细介绍了 Nginx 的日志管理,包括访问日志和错误日志的配置、日志格式的自定义、日志轮换和日志分析。通过这些配置和工具,你可以有效地监控和管理 Nginx 服务器的运行状态,及时发现和解决问题,优化服务器性能。在完成本系列教程后,你已经掌握了 Nginx 的基础知识和配置方法,可以进一步学习和应用更高级的功能和优化技巧。

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值