是否可以配置 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
和即可。考虑到这一点,如果不指定单独的 ,您将无法通过正常性能使用并为每个主机提供单独的日志文件。CustomLog
VirtualHost
ServerAlias
VirtualHost
但是,您可以通过脚本传输日志,并让脚本生成单独的文件。请查看管道日志记录文档。
您还可以使用后处理脚本,例如利用grep
来解析日志。可以在 nightly logrotate 的postrotate
或preprotate
部分下指定后处理脚本。
答案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