Nginx中access_log默认将相对路径解析为--prefix目录(如/usr/local/nginx),非配置文件所在目录;推荐统一使用绝对路径(如/var/log/nginx/access.log),并确保目录存在、Nginx用户有写权限,修改后需nginx -t验证并重载。

在 Nginx 中,access_log 指令默认会将相对路径解析为相对于 nginx.conf 所在目录(即 --prefix 指定的安装前缀,通常是 /usr/local/nginx 或 /etc/nginx),而非当前配置文件所在目录。若你在 http、server 或 location 块中使用相对路径(如 access_log logs/access.log),实际写入位置可能因启动工作目录不同而偏移,尤其在 systemd 管理或容器化部署中容易出错。
直接使用绝对路径是最稳妥的方式
只要在 access_log 指令中明确写出以 / 开头的完整路径,Nginx 就不会做任何拼接,完全按字面解释:
access_log /var/log/nginx/example.com.access.log;access_log /data/logs/myapp/access.log main;access_log /dev/stdout; # 容器环境常用
确保目标目录存在且 Nginx 有写权限
绝对路径本身不自动创建父目录。部署前需手动创建并授权:
对设计或页面进行 WCAG 2.1 AA 无障碍审计。触发关键词:“audit accessibility”、 “check a11y”、 “is this accessible?” 或在审查设计时使用。
- 运行用户(如
www-data或nginx)必须对日志目录有w权限 - 推荐用
mkdir -p /var/log/nginx创建目录,再执行chown nginx:nginx /var/log/nginx(根据实际用户调整) - 避免写入根目录或系统关键路径(如
/tmp临时挂载可能丢失日志)
注意 include 配置中的路径上下文
如果你通过 include /etc/nginx/conf.d/*.conf; 引入子配置,子文件里写的相对路径仍按主配置的 --prefix 解析,不是子文件所在目录。所以即使用了 include,也建议所有 access_log 都统一用绝对路径,避免混淆。
验证配置是否生效
改完后务必测试并重载:
-
nginx -t检查语法和路径可写性(Nginx 1.19.4+ 会提示“cannot create log file”错误) -
nginx -s reload或systemctl reload nginx - 立即触发一次请求,然后
ls -l /var/log/nginx/看文件是否生成、属主是否正确

















