Ubuntu中Nginx日志管理指南
Nginx日志是监控服务器运行状态、排查问题的核心工具,主要包括访问日志(access.log)(记录客户端请求详情)和错误日志(error.log)(记录服务器处理请求时的错误信息)。合理管理日志(配置、轮转、清理、分析)能有效释放磁盘空间、提升运维效率。
Ubuntu系统中,Nginx默认日志文件集中存储在/var/log/nginx/目录下,常见文件及用途如下:
/var/log/nginx/access.log:记录所有客户端请求(如IP地址、请求时间、请求方法、响应状态码等);/var/log/nginx/error.log:记录Nginx运行时的错误信息(如配置错误、权限问题、连接超时等);/var/log/nginx/other_vhosts_access.log:若配置了多个虚拟主机,此文件记录非默认主机的访问日志(需手动开启)。日志轮转是避免日志文件无限增长的关键手段,Ubuntu推荐使用logrotate工具(系统自带)实现自动轮转。以下是具体配置步骤:
Ubuntu默认已安装logrotate,可通过以下命令验证:
which logrotate 若未安装,执行以下命令安装:
sudo apt-get install logrotate 在/etc/logrotate.d/目录下创建nginx文件(若已存在则直接编辑):
sudo nano /etc/logrotate.d/nginx 添加以下配置(可根据需求调整):
/var/log/nginx/*.log { daily # 每天轮转一次(可选:weekly/monthly) missingok # 若日志文件不存在,不报错 rotate 14 # 保留最近14天的日志(可根据磁盘空间调整) compress # 压缩旧日志(节省空间) delaycompress # 延迟压缩(如rotate 14时,第14天的日志不压缩,第15天压缩第14天的) notifempty # 若日志为空,不轮转 create 0640 www-data adm # 轮转后创建新日志文件,权限640,所有者www-data(Nginx用户),组adm sharedscripts # 所有日志轮转完成后,统一执行postrotate脚本 postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` # 向Nginx主进程发送信号,重新打开日志文件 fi endscript } 配置说明:
daily:轮转频率(也可改为weekly/monthly);rotate 14:保留14天的日志(超过的自动删除);compress:使用gzip压缩旧日志(如access.log.1.gz);postrotate:轮转后执行的脚本,用于通知Nginx切换日志文件(避免日志丢失)。手动运行以下命令,模拟日志轮转(无错误则配置正确):
sudo logrotate -d /etc/logrotate.d/nginx # 调试模式(不实际执行) sudo logrotate -f /etc/logrotate.d/nginx # 强制立即执行 logrotate默认通过系统cron任务(/etc/cron.daily/logrotate)每天自动执行,无需额外配置。可通过查看/var/lib/logrotate/status文件,确认Nginx日志的轮转记录。
若需临时清理旧日志(如磁盘空间不足),可使用以下命令:
sudo find /var/log/nginx/ -type f -name "*.log" -mtime +30 -exec rm -f {} \; 说明:
-mtime +30:匹配30天前修改的文件;-exec rm -f {} \;:删除匹配的文件。sudo find /var/log/nginx/ -type f -name "*.log" -mtime +30 -exec gzip {} \; 压缩后的文件会以.gz结尾(如access.log.1.gz),节省磁盘空间。
日志分析能帮助快速定位问题(如404错误、500错误、高频访问IP等),以下是常用工具:
sudo tail -f /var/log/nginx/access.log sudo tail -f /var/log/nginx/error.log sudo tail -f /var/log/nginx/access.log | grep " 404 " sudo tail -f /var/log/nginx/access.log | grep " 500 " sudo apt-get install goaccess sudo goaccess /var/log/nginx/access.log --log-format=COMBINED Prometheus+Grafana监控Nginx日志中的错误率、请求量等指标,设置异常警报(如错误日志激增时发送邮件/短信通知)。/var/log/nginx/目录及日志文件的权限正确(通常为root:root或www-data:adm),避免未经授权的访问;/var/log目录的磁盘使用情况(df -h /var/log),避免日志占满磁盘;sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak);log_format指令(参考Nginx官方文档)。