Lecture06-Nginx-日志配置

文章目录

    [toc]

    单词词性音标含义
    access logn./ˈækses lɒɡ/访问日志(记录每个请求)
    error logn./ˈerə(r) lɒɡ/错误日志(记录出错信息)
    log_formatn./lɒɡ ˈfɔːmæt/日志格式(自定义访问日志每行内容)
    leveln./ˈlevl/级别(错误日志的严重程度)
    rotatev./rəʊˈteɪt/切割(日志按天归档、压缩、清理)

    Lecture06-Nginx-日志配置

    1、本节讲什么

    配好 访问日志(access log) 和 错误日志(error log),并会看日志排错——这是运维排查的"眼睛"。学完你能自定义日志格式、按级别记录错误、用 tail 实时看日志。

    2、概念速览

    Nginx 有两类日志:

    日志默认位置记什么
    访问日志 access_log/var/log/nginx/access.log每个请求:谁、什么时候、访问了啥、返回多少、耗时
    错误日志 error_log/var/log/nginx/error.log出错时:启动失败、配置错误、连接异常等

    日志格式(log_format):决定访问日志里每行长什么样,可以自定义字段。常用字段:

    变量含义例子
    $remote_addr客户端 IP192.168.1.5
    $time_local服务器本地时间17/Oct/2026:10:30:00 +0800
    $request请求行(方法 + 路径 + 协议)GET /api/flowers HTTP/1.1
    $status响应状态码200 / 404 / 502
    $body_bytes_sent返回给客户端的字节数1024
    $request_time整个请求耗时(秒)0.032

    错误日志级别(从轻到重):debug < info < notice < warn < error < crit < alert < emerg。设为 warn 表示记录 warn 及以上。

    3、照着做

    ① 查看默认日志

    sudo tail -f /var/log/nginx/access.log   # 实时看访问日志(Ctrl+C 退出)
    sudo tail -n 50 /var/log/nginx/error.log # 看最近 50 行错误日志
    

    ② 自定义访问日志格式(在 nginx.conf 的 http { } 里)

    http {
        log_format main '$remote_addr - [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$request_time"';
        # 字段:客户端IP - [时间] "请求行" 状态码 字节 "来源页" "浏览器" 耗时
    }
    

    ③ 配置访问日志路径和格式(在 server 或 location 里)

    server {
        access_log /var/log/nginx/flower.access.log main;  # 自定义路径 + 用 main 格式
        error_log  /var/log/nginx/flower.error.log warn;   # 错误日志,记录 warn 及以上
    }
    

    ④ 测试、重载、验证

    sudo nginx -t
    sudo systemctl reload nginx
    curl http://localhost/                 # 制造一次访问
    sudo tail -f /var/log/nginx/flower.access.log   # 看到刚才那次请求记录
    

    ⑤ 关闭日志(不需要时可省磁盘)

    access_log off;    # 关闭访问日志
    

    4、常见疑问

    • Q:日志写满了 / 磁盘满了怎么办? A:日志按天切割是运维标配:配 logrotate(Ubuntu 自带 nginx 的切割规则,在 /etc/logrotate.d/nginx)自动按天归档、压缩、清理旧的。不用手动清。
    • Q:为什么请求报 502/504? A:看 error.log——502 通常是后端没起来/连接失败,504 是后端响应超时。对照主题 4 的 proxy_pass 和后端是否在跑。
    • Q:怎么看某个请求走了静态还是后端? A:看 access.log 的 $request 路径 + 后端是否在 error/后端日志出现。静态请求只有 Nginx access.log 有记录,后端没记录。
    • Q:日志格式想加字段怎么办? A:在 log_format 里加 Nginx 内置变量(如 $http_user_agent 浏览器、$request_time 耗时)即可,然后 reload。

    附:一天速览 & 常见命令速查

    配置流程(每次改配置的固定套路):

    sudo vim /etc/nginx/nginx.conf      # 1. 改配置
    sudo nginx -t                       # 2. 测语法(必须 syntax is ok)
    sudo systemctl reload nginx         # 3. 重载生效
    

    常用命令速查表:

    命令作用
    sudo systemctl status nginx查看运行状态
    sudo systemctl start / stop / restart nginx启动 / 停止 / 重启
    sudo systemctl reload nginx重载配置(不中断,推荐)
    sudo systemctl enable nginx开机自启
    sudo nginx -t测试配置语法
    sudo nginx -v查看版本
    ps -ef \| grep nginx看主/工作进程
    sudo tail -f /var/log/nginx/access.log实时看访问日志
    sudo tail -n 50 /var/log/nginx/error.log看最近错误日志

    核心概念一句话回顾:反向代理(替服务器接客)→ 加多台后端 = 负载均衡 → 静态自己给 + 动态转后端 = 动静分离 → 一切靠日志验证。


    5、本节验证

    • 分清访问日志与错误日志的作用与默认位置 ✅
    • 会自定义 log_format 与日志路径 ✅
    • 会用 tail 实时查看并排查 502/504 ✅
    end