Nginx:如何复制 Apache 的 other_vhosts_access.log 文件以在日志行开头获取 vhost?

Nginx:如何复制 Apache 的 other_vhosts_access.log 文件以在日志行开头获取 vhost?

我在运行 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语句起作用。

相关内容