每个子域名都有不同的 Apache 日志文件吗?

每个子域名都有不同的 Apache 日志文件吗?

是否可以配置 Apache 为每个子域名,即使所有子域都在同一个 VirtualHost 容器内?

因此,我只有一个VirtualHost:

<VirtualHost *:80>
  ServerName example.com
  ServerAlias test1.example.com test2.example.com test3.example.com
</VirtualHost>

我希望最终得到以下日志文​​件:

/var/log/httpd-access_test1.log
/var/log/httpd-access_test2.log
/var/log/httpd-access_test3.log

我知道我可以使用自定义日志格式和拆分日志来做到这一点,但我想知道是否有办法让 Apache 为我完成这一点。

答案1

您只需在每个指令中指定ErrorLog和即可。考虑到这一点,如果不指定单独的 ,您将无法通过正常性能使用并为每个主机提供单独的日志文件。CustomLogVirtualHostServerAliasVirtualHost

但是,您可以通过脚本传输日志,并让脚本生成单独的文件。请查看管道日志记录文档。

您还可以使用后处理脚本,例如利用grep来解析日志。可以在 nightly logrotate 的postrotatepreprotate部分下指定后处理脚本。

Apache 2.2 管道日志

答案2

您应该能够使用 apache 环境变量来实现这个功能:

LogFormat "%h \"%r\" %>s \"%{Referer}i\" \"%{User-Agent}i\"" vhostformat

SetEnvIfNoCase Host example\.com mainlog
CustomLog /var/log/httpd-example.log vhostformat env=mainlog

SetEnvIfNoCase Host test1\.example\.com vhost1log
CustomLog /var/log/httpd-access_test1.log vhostformat env=vhost1log

SetEnvIfNoCase Host test2\.example\.com vhost2log
CustomLog /var/log/httpd-access_test2.log vhostformat env=vhost2log

SetEnvIfNoCase Host test3\.example\.com vhost3log
CustomLog /var/log/httpd-access_test3.log vhostformat env=vhost3log

相关内容