Nginx访问日志配置可以通过log_formataccess_log指令来实现。以下是详细说明和案例:

1. log_format指令

log_format用于定义日志的格式。语法如下:

log_format 格式名称 '日志格式';
  • 格式名称:自定义的日志格式名称。

  • 日志格式:使用Nginx内置变量定义日志内容。

常用变量:

  • $remote_addr:客户端IP地址。

  • $remote_user:客户端用户名(用于基本认证)。

  • $time_local:访问时间。

  • $request:请求行(如GET /index.html HTTP/1.1)。

  • $status:响应状态码(如200、404)。

  • $body_bytes_sent:发送给客户端的字节数。

  • $http_referer:请求来源(Referer)。

  • $http_user_agent:客户端浏览器信息。

  • $http_x_forwarded_for:客户端真实IP(通过代理时)。

2. access_log指令

access_log用于指定日志文件的路径和使用的日志格式。语法如下:

access_log 日志文件路径 格式名称;
  • 日志文件路径:日志文件的存储路径。

  • 格式名称log_format中定义的格式名称。

3. 案例

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

    server {
        listen 80;
        server_name example.com;

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

4. 解释

  • log_format main:定义了一个名为main的日志格式,包含客户端IP、时间、请求、状态码、发送字节数、Referer、User-Agent和真实IP。

  • access_log /var/log/nginx/access.log main:将访问日志写入/var/log/nginx/access.log文件,并使用main格式。

5. 日志轮转

为了防止日志文件过大,可以使用logrotate工具进行日志轮转。示例配置:

/var/log/nginx/access.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        /usr/sbin/nginx -s reload
    endscript
}

6. 总结

通过log_formataccess_log指令,可以灵活配置Nginx访问日志的格式和存储路径。结合logrotate工具,可以实现日志的自动轮转和管理。

本篇文章内容来源于:Nginx访问日志配置详细说明以及案例