我在运行 Nginx 的服务器上托管了多个网站。我不想为所有虚拟主机使用单独的日志文件,但我希望能够从日志中判断每个请求属于哪个 Nginx 虚拟主机。使用 /var/log/nginx/access.log 使用的默认 NCSA“组合”格式无法做到这一点。
Debian/Ubuntu 下的 Apache 默认将日志记录到 /var/log/apache2/other_vhosts_access.log,做包括 vhost 名称。如何为 Nginx 复制此内容?
答案1
将以下代码片段保存为 /etc/nginx/other-vhosts-access-log.conf 并重新加载 Nginx。这将开始记录到 /var/log/nginx/other_vhosts_access.log。(这将不是停止将日志记录到 /var/log/nginx/access.log 。)格式相同(NCSA“组合”格式),但server_name
行首的值是。请注意,使用的是虚拟主机的名称,它不一定与请求的主机名相同(如果有其他server_name
别名指令)。
# borrowed from Apache
# (Could use $host instead of $server_name to log vhost aliases separately)
log_format vhost_combined '$server_name $remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
# Define an access log for VirtualHosts that don't define their own logfile
access_log /var/log/nginx/other_vhosts_access.log vhost_combined
(注意日志轮换,但是nginx-full
包的 logrotate 文件应该涵盖 /var/log/nginx 中的所有文件。)
警告:不要尝试使用以下方法禁用/var/log/nginx/access.log 的日志记录access_log off;
在上述语句之前,因为这将阻止后续access_log
语句起作用。