error_log相对路径的基准是nginx编译时指定的--prefix安装根目录,因其启动后以该值为内部根路径拼接所有相对路径;可通过nginx -v查看configure arguments确认实际prefix,生产环境推荐使用绝对路径避免歧义。

error_log 指定的相对路径,基准是 Nginx 的 --prefix 编译安装路径(即“安装根目录”),不是配置文件所在目录,也不是当前工作目录。
为什么是 --prefix 而不是其他路径?
Nginx 启动时会将 --prefix 值作为内部根路径使用。所有以相对路径形式写的日志路径(如 logs/error.log)、pid 文件路径(logs/nginx.pid)、甚至某些模块默认查找路径,都以此为起点拼接。
例如:
- 源码编译安装时指定
./configure --prefix=/usr/local/nginx→logs/error.log实际写入/usr/local/nginx/logs/error.log - 若用包管理器安装(如 apt/yum),通常预设
--prefix=/var/lib/nginx或类似路径,但发行版常通过配置覆盖为/var/log/nginx/,所以实际路径由打包策略决定,而非硬编码
如何确认当前生效的 --prefix?
运行以下命令可查出实际使用的 prefix:
nginx -V 2>&1 | grep 'configure arguments'
输出中找 --prefix=xxx 字段。也可用 nginx -t -q 后检查错误日志是否创建在预期位置,反向验证。
相对路径写法的实际效果
配置中写 error_log logs/error.log; 等价于:
- 如果
--prefix=/etc/nginx→ 实际路径是/etc/nginx/logs/error.log(不常见,易权限问题) - 如果
--prefix=/usr/local/nginx→ 实际路径是/usr/local/nginx/logs/error.log - 如果
--prefix=/var/lib/nginx→ 实际路径是/var/lib/nginx/logs/error.log(部分 Debian 包采用)
注意:即使配置文件放在 /etc/nginx/nginx.conf,logs/error.log 也不会解析成 /etc/nginx/logs/error.log —— 这是常见误解。
生产环境建议直接用绝对路径
避免依赖 prefix 推导,推荐显式写绝对路径:
- Ubuntu/Debian:
error_log /var/log/nginx/error.log warn; - RHEL/CentOS:
error_log /var/log/nginx/error.log warn; - 自建环境:
error_log /data/log/nginx/error.log warn;
这样既明确、可审计,又规避了 prefix 变更或不同安装方式带来的路径歧义。











