zoukankan      html  css  js  c++  java
  • Nginx日志配置

    Nginx日志配置

    参考文档:Nginx基本配置和日志处理

    Nginx 日志配置不同位置的不同含义:

    1. 在 nginx 配置文件的最外层,我们可以配置 error_log,这个 error_log 能够记录 nginx 启动过程中的异常,也能记录日常访问过程中遇到的错误。

    2. 在 http 段中可以配置 error_log 和 access_log,可以用于记录整个访问过程中成功的,失败的,错误的访问。

    3. 在 server 内部配置属于专门 server 的 error_log 和 access_log,这是我们常用的,不同业务日志分开。

    最后我们需要知道的,越往配置里层,优先级越高,意味着 server 的日志记录以后并不会因为你在外层写了日志而再次记录。

    在日志配置中,有如下关键字:

    error_log logs/error.log error;  -> 错误日志,级别:debug/info/notice/warn/error/crit/alert/emerg
    access_log logs/access.log main; -> 正常访问日志,可以关闭:access_log off
    open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2; -> 日志写入都是经过打开,写入,关闭文件。该参数用于设置日志文件的缓存,默认 off
    log_not_found on | off;          -> 是否在 error_log 中记录不存在的错误,默认 on
    log_subrequest on | off;         -> 是否在 access_log 中记录子请求的记录,默认 off
    rewrite_log  on | off;           -> 重写的日志,该日志只有在 rewrite 时候起作用,一般用于调试,默认 off
    

    另外我们需要单独拿出来谈谈的是日志格式关键字:log_format

    我们需要先知道的是,在 nginx 中内置了很多变量,我们都可以直接拿来使用,在日志这里我们常用的变量:

    $remote_addr    客户端的 IP 地址
    $remote_user    客户端用户名称
    $time_local     当前时区时间
    $time_iso8601   ISO8601 标准格式下的本地时间
    $request        请求的 URL 与 HTTP 协议
    $status         请求状态,成功 200
    $body_bytes_sent    发送给客户端的主体文件大小
    $http_referer   从哪个页面来的
    $http_user_agent    客户端浏览器信息
    $http_x_forwarded_for   客户端真实 IP
    $connection     连接的序列号
    $connection_requests    当前通过一个连接获取的请求数量
    $msec           日志写入时间
    $pipe           pipeline 标识
    $request_length 请求长度
    $request_time   请求处理时间
    

    我们先看下默认的配置:

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

    我们可以进行简单的改写,便于查看:

    log_format  mylog '$remote_addr - $status $remote_user [$time_local] "$request" '
                      '[Bytes: $body_bytes_sent - Time: $request_time] "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    

    此时我们删除配置中原来的日志配置,修改为我们新的:

    ...
    http {
        ...
        log_format  mylog '$remote_addr - $status $remote_user [$time_local] "$request" '
                          '[Bytes: $body_bytes_sent - Time: $request_time] "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /data/logs/nginx/access.log  mylog;
        ...
    }
    

    红色部分需要特别注意,我们改了这个格式的名字,自然使用的时候也要换成这个名字。

    重载 nginx 后访问查看日志 /data/logs/nginx/access.log:

    至于为啥状态码是 304 而不是 200,原因在于对于这种静态文件,nginx 在第一次访问的时候状态码 200,再次访问就是 304 了。

    如果你还想 200,可以 ctrl + F5 强制刷新浏览器就是 200 了。 而且 304 可以发现其实服务器发送大小是 0 的。

    至于针对单个 server(虚拟主机) 增加专门的日志,我们可以修改 demo.conf:

    # 80 端口测试
    server {
        listen       80;
        ...
        error_log   /data/logs/nginx/demo-error.log   info;
        access_log  /data/logs/nginx/demo-access.log  mylog;
    }
    ...
    

    重载配置访问测试我们可以发现:

    1. 原本的 access.log 无论专门刷新也没有日志写入了。

    2. 在 /data/logs/nginx 目录下生成了我们刚刚配置的日志:

    日志已经写到了新的文件里面!

  • 相关阅读:
    Maven中的依赖相关总结
    Redis(序)应用场景
    Java并发专栏(一)—— Process vs Thread
    Java中转换为二进制的几种实现
    Java中转换为十六进制的几种实现
    oracle日期格式和java日期格式区别 HH24:mm:ss和HH24:mi:ss的区别
    远程教学的一些准备
    将latex的beamer做的幻灯片转换为ppt格式后的一些问题
    最近看过的雨课堂和智慧树的笔记
    关于在线授课的探索
  • 原文地址:https://www.cnblogs.com/JeromeLong/p/13234799.html
Copyright © 2011-2022 走看看