nginx日志管理核心是通过access_log和error_log指令控制写入位置、格式、级别与生命周期,而非手动删文件或chmod;需在http/server块中配置路径与作用域,用log_format定制内容,logrotate轮转归档。

管理 Nginx 日志目录中的访问日志(access.log)和错误日志(error.log),核心是控制写入位置、格式、级别、生命周期,而不是手动删文件或 chmod 操作。直接操作日志文件容易引发权限、丢失数据或服务异常等问题。
明确日志路径与作用域
日志路径由 access_log 和 error_log 指令决定,可在不同层级配置:
-
全局生效(http 块):影响所有虚拟主机,适合统一规范
http {<br> access_log /var/log/nginx/access.log main;<br> error_log /var/log/nginx/error.log warn;<br>} -
单站点隔离(server 块):便于按域名/业务拆分分析
server {<br> server_name api.example.com;<br> access_log /var/log/nginx/api.access.log;<br> error_log /var/log/nginx/api.error.log error;<br>} -
关闭某处日志:用
access_log off;或error_log /dev/null;(注意:off在某些版本中不生效,/dev/null更可靠)
定制日志内容与格式
默认 combined 格式已够用,但生产环境常需增强可追溯性:
- 添加真实客户端 IP(尤其有 CDN 或反向代理时):
用$http_x_forwarded_for或更稳妥的map方式提取首 IP - 加入性能指标:
$request_time(请求处理耗时)、$upstream_response_time(后端响应耗时) - 定义自定义格式并引用:
log_format detailed '$http_x_forwarded_for - $remote_user [$time_local] "$request" '<br> '$status $body_bytes_sent "$http_referer" "$http_user_agent" '<br> '$request_time $upstream_response_time';<br>access_log /var/log/nginx/app.access.log detailed;
控制日志级别与输出行为
错误日志支持分级,访问日志支持缓冲与压缩:
-
错误日志级别从宽松到严格:debug → info → notice → warn → error → crit → alert → emerg
生产环境推荐warn或error,避免日志爆炸;调试阶段可临时设为info -
访问日志优化写入:
•buffer=64k:启用内存缓冲,减少磁盘 I/O
•gzip:自动压缩旧日志(需配合 logrotate)
•flush=1m:缓存最多 1 分钟强制刷盘,平衡实时性与性能
安全轮转与归档(非手动删)
不要用 rm 或 echo "" > access.log 清空日志——这会导致 Nginx 因文件句柄失效而无法写入。正确做法是:
- 用系统工具 logrotate 自动切割(推荐):
配置/etc/logrotate.d/nginx,包含rotate 30、daily、compress、missingok和sharedscripts+postrotate nginx -s reload - 手动触发切割(应急时):
mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +%Y%m%d)<br>kill -USR1 $(cat /var/run/nginx.pid)
(USR1 信号通知 Nginx 重新打开日志文件) - 定期清理归档:对压缩后的
access.log.20260701.gz等按策略保留或同步至日志平台











