Nginx日志应统一存放于/var/log/nginx/,命名规范为access.log/error.log及编号归档,按站点可语义化命名;需定义安全日志格式屏蔽敏感信息,错误级别设为warn或error;依赖logrotate轮转并设权限640、属主nginx:adm。

nginx 的日志目录(通常为 logs/)中,访问日志(access.log)和错误日志(error.log)的命名、轮转、权限与路径应遵循清晰、可维护、安全且便于分析的规范。不规范的日志管理会导致排查困难、磁盘爆满、权限泄露或审计失效。
日志文件命名与存放路径规范
建议将日志文件统一放在独立可管理的路径下(如 /var/log/nginx/),而非源码编译时默认的 nginx/logs/ 相对路径,避免因工作目录变更导致日志写入异常。
- 访问日志推荐命名:
access.log(主日志)、access.log.1(上一轮)、access.log.2.gz(更早压缩归档) - 错误日志推荐命名:
error.log(主日志)、error.log.1、error.log.2.gz - 若需按站点区分,可用
example.com.access.log、api.example.com.error.log等语义化命名,但需在server块中显式指定access_log和error_log指令
日志格式与内容控制规范
默认的 combined 日志格式已覆盖多数需求,但敏感信息(如身份证号、手机号、token、完整 referer 或 user-agent)不应明文记录。
- 在
http块中定义精简、安全的自定义日志格式,例如屏蔽敏感参数: log_format safe '$remote_addr - $remote_user [$time_local] "$request_method $uri" $status $body_bytes_sent "$http_referer" "$http_user_agent"';- 避免在日志中记录
$request_body(除非调试需要且已脱敏),因其可能含密码或 PII 数据 - 错误日志级别建议设为
warn或error(生产环境避免info或debug),减少噪音并提升关键问题识别效率
日志轮转与磁盘空间管理规范
nginx 本身不自动轮转日志,必须依赖外部工具(如 logrotate)或信号机制(kill -USR1)实现切割,否则单个日志文件会持续增长直至占满磁盘。
- 使用
logrotate配置示例(/etc/logrotate.d/nginx): /var/log/nginx/*.log {<br> daily<br> missingok<br> rotate 30<br> compress<br> delaycompress<br> notifempty<br> create 0644 nginx nginx<br> sharedscripts<br> postrotate<br> if [ -f /var/run/nginx.pid ]; then<br> kill -USR1 `cat /var/run/nginx.pid`<br> fi<br> endscript<br>}- 确保
create权限设置合理(如0644),属主属组匹配运行用户(如nginx:nginx),防止日志不可写或越权读取
权限与安全访问控制规范
日志文件含大量请求上下文,属于高敏感资产,需严格限制访问权限。
- 主日志文件(
access.log、error.log)权限应为640或644,属主属组为nginx:adm(Linux 常见日志组),确保只有运维和监控工具可读 - 禁止将日志目录设为 Web 可访问路径(如
/var/www/html/logs/),防止通过 HTTP 直接下载日志 - 若使用集中日志系统(如 ELK、Loki),应通过专用 agent(Filebeat、Promtail)采集,并启用 TLS 加密传输,不开放原始日志目录网络访问


















