1

Мне действительно нужна помощь с этим. Мой сервер имеет несколько виртуальных хостов, каждый виртуальный хост имеет свой журнал доступа, мне нужно иметь возможность настроить LogFormat для каждого виртуального хоста, существующего на сервере. Я изменил LogFormat в httpd.conf но на самом деле он влияет только на основной журнал доступа, а не на виртуальные хосты.

Вот мой LogFormat:

<IfModule log_config_module>
LogFormat "%v:%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{CF-Connecting-IP}i" combinedvhost
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{CF-Connecting-IP}i" combined
LogFormat "%h %l %u %t \"%r\" %>s %b %{CF-Connecting-IP}i" common

CustomLog "logs/access_log" combined
CustomLog logs/access_log combinedvhost

<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{CF-Connecting-IP}i" combinedio
</IfModule>

</IfModule>

<IfModule mod_log_config.c>
LogFormat "%v:%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{CF-Connecting-IP}i" combinedvhost
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{CF-Connecting-IP}i" combined
LogFormat "%h %l %u %t \"%r\" %>s %b %{CF-Connecting-IP}i" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

CustomLog logs/access_log common
CustomLog logs/access_log combined
CustomLog logs/access_log combinedvhost

</IfModule>

Приведенный выше LogFormat влияет только на основной журнал доступа, который находится по адресу: /usr/local/apache/logs/access_log Однако он не влияет на виртуальные хосты на сервере, чьи журналы доступа расположены по адресу: /home/username/access-logs/domain.com

Я не уверен, что у меня что-то не так в самом LogFormat или я что-то упустил. Я потратил много часов, пытаясь решить эту проблему, но не нашел решения. Я был бы очень признателен, если бы кто-то мог пролить свет на это. Спасибо.

2 ответа2

2

Хитрость заключается в том, чтобы добавить директивы CustomLog внутри каждого VirtualHost в ваших конфигурационных файлах Apache. Например:

<VirtualHost *:80>
  ServerName www.site1.com
  DocumentRoot /var/www/www.site1.com/htdocs
  CustomLog /var/log/apache/www.site1.com-access.log combined
  ErrorLog /var/log/apache/www.site1.com-error.log
</VirtualHost>

<VirtualHost *:80>
  ServerName www.site2.com
  DocumentRoot /var/www/www.site2.com/htdocs
  CustomLog /var/log/apache/www.site2.com-access.log combined
  ErrorLog /var/log/apache/www.site2.com-error.log
</VirtualHost>

Есть более полезные примеры здесь.

0

Хитрость заключается в том, что вы должны иметь оба LogFormat и CustomLog в одном пуле VirtualHost


<VirtualHost *:443>
    ServerName my.site.com
    LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b %D  " commonvhost
    ErrorLog "|/opt/mw/apache-2.4.25-instance1/bin/rotatelogs /apps/logs/my.site.com-443-error.%Y.%m.%d.log 86400"
    CustomLog "|/opt/mw/apache-2.4.25-instance1/bin/rotatelogs /apps/logs/my.site.com-443-access.%Y.%m.%d.log 86400" commonvhost
</VirtualHost>

<VirtualHost *:80>
    ServerName my.site.com
    LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b %D  " commonvhost
    ErrorLog "|/opt/mw/apache-2.4.25-instance1/bin/rotatelogs /apps/logs/my.site.com-80-error.%Y.%m.%d.log 86400"
    CustomLog "|/opt/mw/apache-2.4.25-instance1/bin/rotatelogs /apps/logs/my.site.com-80-access.%Y.%m.%d.log 86400" commonvhost
</VirtualHost>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .