首页主机资讯Ubuntu Nginx如何日志管理

Ubuntu Nginx如何日志管理

时间2026-01-22 07:09:05发布访客分类主机资讯浏览1298
导读:Ubuntu 上 Nginx 日志管理实操指南 一 基础配置与日志格式 日志类型与路径 访问日志:记录每个请求的细节,默认路径 /var/log/nginx/access.log。 错误日志:记录运行与请求处理错误,默认路径 /var/...

Ubuntu 上 Nginx 日志管理实操指南

一 基础配置与日志格式

  • 日志类型与路径
    • 访问日志:记录每个请求的细节,默认路径 /var/log/nginx/access.log
    • 错误日志:记录运行与请求处理错误,默认路径 /var/log/nginx/error.log
    • 建议在 /etc/nginx/nginx.confhttp 块设置全局日志,在 server 块为站点单独设置以覆盖全局。
  • 配置访问日志与错误日志
    • 基本用法:
      • access_log /var/log/nginx/access.log combined;
      • error_log /var/log/nginx/error.log warn;
    • 关闭访问日志:access_log off; (错误日志不建议关闭)。
  • 自定义日志格式
    • http 块定义格式,然后在 access_log 中引用:
      • 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;
  • 生效配置
    • 测试:sudo nginx -t
    • 重载:sudo systemctl reload nginx
      以上要点与默认路径、格式与指令作用域、启停重载流程适用于 Ubuntu 上的 Nginx 部署。

二 日志轮转 Logrotate 推荐做法

  • 创建配置
    • 新建:sudo nano /etc/logrotate.d/nginx
    • 推荐配置(按天轮转、保留 14 天、压缩归档、轮转后通知 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/weekly/monthly:轮转周期;rotate N:保留 N 个归档;compress/delaycompress:压缩与延迟压缩;
    • create 0640 www-data adm:新日志权限与属主(Ubuntu 常见为 www-data 用户与 adm 组);
    • postrotate 发送 USR1 信号,使 Nginx 重新打开日志文件,避免继续写入旧文件。
  • 测试与执行
    • 调试:sudo logrotate -d /etc/logrotate.d/nginx(只演练不生效)
    • 强制执行:sudo logrotate -f /etc/logrotate.d/nginx
  • 按大小轮转
    • 将 daily 改为 size 100M,即可在日志达到 100MB 时触发轮转。
  • 运行方式
    • logrotate 通常由系统的 /etc/cron.daily/logrotate 每日定时任务自动调用,无需额外 cron 配置。
      以上为 Ubuntu 上最通用、可靠的 Nginx 日志轮转实践。

三 条件与高级日志

  • 仅记录错误状态码请求(4xx/5xx)
    • 在 http 块加入 map,按 $status 动态决定是否写访问日志:
      • map $status $loggable { ~^[45] 1; default 0; }
      • access_log /var/log/nginx/error_access.log combined if=$loggable;
  • 仅记录特定来源 IP
    • map $remote_addr $loggable_ip { default 0; 192.168.1.100 1; }
    • access_log /var/log/nginx/special_access.log combined if=$loggable_ip;
  • 实时查看与过滤
    • 实时访问日志:sudo tail -f /var/log/nginx/access.log
    • 过滤 404:sudo tail -f /var/log/nginx/access.log | grep “404”
  • 记录地理位置(需模块)
    • 安装模块:sudo apt-get install libnginx-mod-http-geoip
    • 在 http 块加载数据库并定义格式:
      • geoip_country /usr/share/GeoIP/GeoIP.dat;
      • geoip_city /usr/share/GeoIP/GeoLiteCity.dat;
      • log_format geo ‘$remote_addr - $remote_user [$time_local] “$request” $status $body_bytes_sent “$http_referer” “$http_user_agent” $geoip_country_name $geoip_city’;
      • access_log /var/log/nginx/geo_access.log geo;
        以上技巧便于按需精简日志、聚焦异常与关键来源,或在日志中增加地理维度。

四 常见问题与排查

  • 权限与属主
    • 确保轮转后新日志可被 www-data 写入:create 0640 www-data adm;必要时检查 /var/log/nginx 目录权限。
  • 信号未生效
    • 确认 /var/run/nginx.pid 路径正确;若自定义了 pid 指令,需同步修改 postrotate 中的路径。
  • 多站点与多实例
    • 为每个站点或实例分别配置 access_log;多实例需分别处理各自的 pid 与日志路径。
  • 配置生效
    • 每次修改 Nginx 配置后执行:sudo nginx -t & & sudo systemctl reload nginx。
  • 验证轮转是否成功
    • 观察 /var/log/nginx 是否出现 .1 / .1.gz 等归档;用调试模式检查计划任务:sudo logrotate -d /etc/logrotate.d/nginx。
      以上为运维中最常见的坑与快速修复路径,可显著提升排障效率。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu Nginx如何日志管理
本文地址: https://pptw.com/jishu/789698.html
Rust在Debian上的最新动态 Debian Crontab如何解决时区问题

游客 回复需填写必要信息