Каталог динамического журнала Apache на основе имени хоста

У меня есть приложение PHP, которое используется несколькими доменами. Чтобы избежать поддержки нескольких виртуальных хостов, я только что настроил один виртуальный хост Apache «по умолчанию», чтобы направлять любой входящий запрос на сервер в каталог приложения.

Что я хочу сделать, так это динамически установить пути доступа и журнала ошибок Apache на основе имени хоста, попадающего на сервер.

Например, я хотел бы установить пути журнала примерно так:

/var/log/application_name/example.com/error.log
/var/log/application_name/example.com/access.log

когда делается запрос к example.com.

Есть ли жизнеспособный способ сделать это? Я рассматривал возможность использования любой из переменных среды Apache, но, поскольку они настраиваются при захвате запроса, я не думаю, что они будут доступны для использования в директивах ErrorLog или CustomLog. Мне просто нужно установить каталог журнала вручную на уровне приложения (т.е. в PHP)?

Спасибо


person James    schedule 26.11.2013    source источник


Ответы (2)


Я использую такую ​​настройку, когда мой сценарий logsplit.sh записывает файлы журнала на основе %U:

<VirtualHost *:80>
    ServerName myserver.com
    ServerAlias *.myserver.com
    VirtualDocumentRoot /home/%1/www/
    LogFormat "%U %h %l %u %t \"%r\" %>s %b" common
    CustomLog "|/usr/local/logsplit.sh" common
</VirtualHost>
person Jesper Blaase    schedule 26.11.2013
comment
Могу ли я не делать что-то вроде: CustomLog "/usr/local/%{HTTP_HOST}.log" common. Или, по крайней мере, передать ${HTTP_HOST} в качестве аргумента для logsplit.sh, чтобы я мог разделить по хостам? - person James; 26.11.2013
comment
Конечно, вы могли бы сделать это: LogFormat %{HTTP_HOST} %h %l %u %t \%r\ %›s %b common К сожалению, вы не можете использовать vars в путях к файлам журнала. - person Jesper Blaase; 27.11.2013

Вы можете сделать это с VirtualHosts, поддерживая только 1 VirtualHost для нескольких доменов, используя ServerAlias:

<VirtualHost *:80>
        ServerAdmin ...
        ServerName domain1.bla.com
        ServerAlias service.bla.com domain5.domain.xxx
        DocumentRoot /www/vhosts/xxx/public

        ErrorLog /www/vhosts/xxx/log/error.log
        CustomLog /www/vhosts/ccc/log/access.log combined
        LogLevel warn

        <Directory "/www/vhosts/ccc/public">
                Options FollowSymLinks MultiViews
                php_admin_flag safe_mode On
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>
person Daniel W.    schedule 26.11.2013