error_log 指令应置于 nginx.conf 的 main 上下文,通常在 worker_processes 和 pid 之后、events 之前;支持多级定义,优先级为 location > server > http > main;路径需确保 nginx 工作进程有写入权限。

在 Nginx 的 nginx.conf 全局配置中,error_log 指令通常位于 main(主)上下文,也就是配置文件最外层、所有大括号块之外的位置,紧邻 user、worker_processes、pid 等指令。
main 上下文中的典型位置
它属于全局指令,作用于整个 Nginx 实例。标准写法如下:
- 放在
events { ... }块之前或之后均可,但习惯上置于worker_processes和pid之后、events之前 - 常见示例顺序:
user→worker_processes→pid→error_log→events→http - 路径一般使用绝对路径,如
/var/log/nginx/error.log;若用相对路径(如logs/error.log),则基于 Nginx 安装目录下的logs/子目录解析
可配置的范围层级
error_log 支持多级定义,优先级由高到低为:location > server > http > main。也就是说:
- 如果只在 main 层写了
error_log /path/to/main.log warn;,它就是全局默认错误日志 - 若某
server块内又写了error_log /path/to/server.log error;,该虚拟主机的错误就会单独记录到这个文件,且级别为 error - 同理,
location内再定义,就只捕获该路径下的错误(较少用,调试特定路由时有用)
权限与路径注意事项
main 层定义的 error_log 路径需确保 Nginx 工作进程(通常是 nginx 或 www-data 用户)有写入权限:
- 目录需存在,且用户对该目录有
w权限 - 日志文件本身无需预先创建,Nginx 启动或重载时会自动创建
- 若路径不可写,Nginx 不会报错退出,但日志将无法写入——可通过
ps aux | grep nginx查看 worker 进程用户,再用ls -ld /var/log/nginx验证权限
不推荐的写法
避免以下常见误配:
- 把
error_log错误地写进http块内部却忘了 main 层——虽然合法,但容易混淆作用域 - 在 main 层用了
debug级别且未关闭——生产环境会导致 I/O 压力剧增 - 路径含空格或特殊字符未加引号(如
error_log /var/log/nginx/my app.log;应写作error_log "/var/log/nginx/my app.log";)











