可在Nginx的server块中用access_log指令单独指定访问日志路径,实现按虚拟主机或域名分离日志;支持自定义格式、关闭日志及权限配置,需检查语法并重载生效。

可以在 Nginx 的 server 块中单独指定访问日志路径,实现不同虚拟主机或域名的日志分离。
使用 access_log 指令定义专属日志路径
在对应 server 块内使用 access_log 指令,指定该站点独有的日志文件路径和可选格式。Nginx 会自动创建父目录(需确保 Nginx 进程有写权限),但不会自动创建日志文件本身(首次写入时生成)。
- 基本写法:
access_log /var/log/nginx/example.com.access.log; - 指定日志格式:
access_log /var/log/nginx/api.example.com.access.log main;(main是默认格式名,也可自定义) - 关闭该 server 的访问日志:
access_log off;
配合 log_format 自定义日志内容
若需记录额外字段(如真实 IP、响应时间、上游地址等),先在 http 块中定义格式,再在 server 块中引用:
- 在
http块中添加:log_format upstream_time '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_time $upstream_response_time'; - 在对应
server块中启用:access_log /var/log/nginx/app.access.log upstream_time;
注意权限与路径规范
确保 Nginx 工作进程(通常是 www-data 或 nginx 用户)对目标日志目录有写权限。建议将日志统一放在 /var/log/nginx/ 下,避免跨分区或挂载点问题。
- 创建目录并赋权:
sudo mkdir -p /var/log/nginx/example.com && sudo chown nginx:nginx /var/log/nginx/example.com - 路径中避免使用变量(如
$host)除非明确配置了log_format支持且已测试稳定,否则可能导致日志写入失败或路径混乱
验证配置并重载
修改后务必检查语法并重载,避免服务中断:
- 检查配置:
sudo nginx -t - 重载生效:
sudo nginx -s reload - 确认日志生成:
ls -l /var/log/nginx/your-site.access.log,并触发一次请求观察是否写入










