Можно ли настроить 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 сделал это за меня.
Вы просто указываете ErrorLog
и CustomLog
внутри каждого VirtualHost
директива. Имея это в виду, вы не сможете использовать ServerAlias
и иметь отдельные файлы журналов для каждого хоста при нормальной производительности без указания отдельных VirtualHost
.
Однако вы можете пропустить журнал через скрипт и сделать так, чтобы скрипт создавал отдельные файлы. Посмотрите документацию по конвейерному ведению журнала.
Вы также можете использовать сценарий постобработки, например, используя grep
для анализа журналов. Сценарий пост-обработки может быть указан в ночном логротате под postrotate
или preprotate
разделы.
Вы должны иметь возможность использовать переменные среды 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