企业级Nginx access_log规范化需遵循“精准记录、安全可控、可运维、易分析”原则:统一存于/var/log/nginx/,语义化命名;定义standard与safe两种日志格式,推荐JSON;分级记录、条件写入;logrotate自动化轮转,权限设为0750/0640,启用缓冲写入。

企业级网站的 Nginx access_log 规范化,核心是“精准记录、安全可控、可运维、易分析”。不是日志越多越好,而是每条日志都该有明确用途。
统一路径与命名规则
所有访问日志必须存放在 /var/log/nginx/,禁用相对路径(如 logs/access.log)或源码编译默认路径。主日志用语义化命名:
- 全局主日志:access.log(供基础监控)、error.log(错误汇总)
- 按站点分离:example.com.access.log、api.example.com.access.log
- 按用途区分:healthz.access.log(健康检查)、pay.access.log(支付接口专用)
- 归档文件带日期后缀:access.log.20261002,不依赖 logrotate 的 dateext(避免时区歧义)
定义安全、精简、可扩展的日志格式
禁用默认 combined 格式直接上线。在 http 块中定义至少两个格式:
对设计或页面进行 WCAG 2.1 AA 无障碍审计。触发关键词:“audit accessibility”、 “check a11y”、 “is this accessible?” 或在审查设计时使用。
- standard(主格式):含时间戳、主机名、真实 IP($http_x_forwarded_for 或 $realip_remote_addr)、请求方法、URI、状态码、响应大小、Referer、User-Agent、request_time
- safe(合规格式):显式过滤敏感字段,不记录 $request_body、$cookie_token、$arg_code 等;对 $uri 和 $args 做正则脱敏(如用 map 指令替换手机号、身份证片段)
- 推荐启用 JSON 格式输出(log_format json escape=json '{...}'),便于 ELK 或 Loki 直接解析
分级记录与条件写入
避免全量写入,用策略降低 I/O 压力和存储成本:
- 静态资源(js/css/img)用极简格式,仅记 $uri $status $bytes_sent
- 用 map + if 控制日志开关:map $request_uri $loggable { ~^/healthz 0; ~^/metrics 0; default 1; },再配 access_log ... if=$loggable
- 关闭无价值日志:log_not_found off;(防大量 404 写入)
- 高危接口(如 /login、/reset-password)可单独开启详细日志,但需配合 lua-resty-logger-socket 异步落盘并脱敏
轮转、权限与生命周期闭环
靠人工清理等于没管理。必须通过 logrotate 实现自动化闭环:
- 配置 daily 轮转,保留 30 天,自动压缩(compress),旧日志同步至对象存储后本地删除
- postrotate 中执行 nginx -s reopen,确保 worker 进程切换到新文件
- 日志目录权限设为 0750,日志文件为 0640,属主 nginx:adm
- 启用缓冲写入:access_log /var/log/nginx/access.log main buffer=64k flush=5s,平衡性能与实时性

















