Как иметь отдельные файлы журнала Apache2 в зависимости от пользователя mod_userdir? - PullRequest
5 голосов
/ 15 ноября 2011

Я использую mod_userdir в Apache 2.2, чтобы предоставить нескольким пользователям доступ к веб-серверу (для их тестов и прочего).

Я хотел бы предоставить своим пользователям доступ к журналам apache (чтобы они моглиможет отлаживать свои сценарии), но записи журнала (и ErrorLog, и CustomLog: error.log и access.log ) объединяются вместе (независимо от того, что относится к каталогу "user").

Есть ли способ разделить журнал на несколько файлов (в зависимости от пользователя).

Версия Apache: 2.2.16

" / etc / apache2Конфигурационный файл / sites-enabled / 000-default":

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>
</VirtualHost>

" / etc / apache2 / mods-enabled / userdir.conf"Файл конфигурации:

<IfModule mod_userdir.c>
        UserDir /home/*/public_html
        UserDir disabled root

        <Directory /home/*/public_html>
                AllowOverride FileInfo AuthConfig Limit Options
                Options MultiViews Indexes IncludesNoExec
                IndexOptions FoldersFirst FancyIndexing IgnoreCase
                php_admin_value open_basedir "..:/usr/share/php/"
        </Directory>

        ErrorLog /tmp/apache2-userdir-error.log

        LogLevel warn

        CustomLog /tmp/apache2-userdir-access.log
</IfModule>

Ответы [ 2 ]

3 голосов
/ 04 апреля 2012

Хммм ... Я на 99% уверен, что вы можете использовать группы захвата регулярных выражений в "SetEnvIf", чтобы сделать это ...

Я сделал нечто подобное - я разделил журналы пользователя (всеих) отключить от журналов веб-сайта, используя следующее:

  SetEnvIf Request_URI "^/~.*$" useraccess=1

  CustomLog /var/www/logs/access.log combined env=!useraccess
  CustomLog /var/www/logs/user-access.log combined env=useraccess

Вы должны быть в состоянии сделать:

  SetEnvIf Request_URI "^/~([^/]+)/.*$" username=$1
  CustomLog /var/www/logs/${username}.log combined
1 голос
/ 20 мая 2012

В соответствии с Руководством Apache CustomLog (модуль mod_log_config) , вместо файла может быть указана программа, эта программа получит вход в свой STDIN.

Затем можно легко проанализировать это сообщение журнала, чтобы проверить, по какому пути это сообщение (таким образом, для какого пользователя), и записать его в определенный файл (например, по имени пользователя).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...