Назад | Перейти на главную страницу

Разный файл журнала 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 сделал это за меня.

Вы просто указываете ErrorLog и CustomLog внутри каждого VirtualHost директива. Имея это в виду, вы не сможете использовать ServerAlias и иметь отдельные файлы журналов для каждого хоста при нормальной производительности без указания отдельных VirtualHost.

Однако вы можете пропустить журнал через скрипт и сделать так, чтобы скрипт создавал отдельные файлы. Посмотрите документацию по конвейерному ведению журнала.

Вы также можете использовать сценарий постобработки, например, используя grep для анализа журналов. Сценарий пост-обработки может быть указан в ночном логротате под postrotate или preprotate разделы.

Ведение журнала Apache 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