Nginx为不同虚拟主机配置独立日志,需在各server块内分别设置access_log和error_log指令,支持自定义路径、级别及复用log_format;应禁用http块中的全局日志以避免干扰,并通过nginx -t和reload验证生效。
Nginx 为不同虚拟主机配置独立日志,核心是把 access_log 和 error_log 指令写在各自的 server 块内,而不是只放在全局 http 块里。这样每个域名或站点就能拥有专属的日志文件,避免混杂、便于排查和分析。
server {listen 80;server_name site-a.com;root /var/www/site-a;access_log /var/log/nginx/site-a.access.log main;error_log/var/log/nginx/site-a.error.log warn;location / { index index.html; }}
server {listen 80;server_name site-b.com;root /var/www/site-b;access_log /var/log/nginx/site-b.access.log main;error_log/var/log/nginx/site-b.error.log error;location / { index index.html; }}
注意:
access_log 和 error_log 可以同时存在,且路径可完全不同;warn、error)可按需设置,site-b 可以记录更严格的错误,而 site-a 保持常规警告;nginx 进程用户,通常是 www-data 或 nginx,能往 /var/log/nginx/ 写入)。http {log_format detailed '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';server {server_name api.example.com;access_log /var/log/nginx/api.access.log detailed;error_log/var/log/nginx/api.error.log error;# ...}server {server_name www.example.com;access_log /var/log/nginx/www.access.log detailed;error_log/var/log/nginx/www.error.log warn;# ...}}
日志路径不生效常见原因:目录不存在、权限不足、路径拼写错误(比如少个 .log 后缀)、指令写在了 location 里却忘了 server 层级的 access_log 开关。