基于主机名的动态apache日志目录

时间:2013-11-26 12:47:58

标签: apache hostname vhosts

我有一个由多个域使用的PHP应用程序。为了避免维护多个vhost,我只设置了一个“默认”Apache vhost来将任何传入的请求定向到服务器到应用程序目录。

我想要做的是根据命中服务器的主机名动态设置Apache访问和错误日​​志路径。

例如,我想将日志路径设置为:

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

example.com发出请求时。

有可行的方法吗?我已经看过使用任何Apache环境变量,但是因为这些是在捕获请求时设置的,所以我认为这些变量不能用于ErrorLog或CustomLog指令。是不是我只需要在应用程序级别手动设置日志目录(即在PHP中)?

由于

2 个答案:

答案 0 :(得分:6)

我使用这样的设置,我的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>

答案 1 :(得分:-1)

您只需使用ServerAlias为多个域维护1个VirtualHost,即可使用VirtualHosts执行此操作:

<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>