如何根据 mod_userdir 的用户拥有单独的 Apache2 日志文件?
Posted
技术标签:
【中文标题】如何根据 mod_userdir 的用户拥有单独的 Apache2 日志文件?【英文标题】:How to have separate Apache2 log files depending on the user of mod_userdir? 【发布时间】:2011-11-15 18:20:22 【问题描述】:我在 Apache 2.2 上使用 mod_userdir 让多个用户访问 Web 服务器(用于他们的测试和其他内容)。
我想让我的用户访问 apache 日志(以便他们可以调试他们的脚本)但日志条目(ErrorLog
和 CustomLog
:error.log 和 access.log)被组合在一起(无论“用户”目录是什么)。
有没有办法将日志分成多个文件(取决于用户)。
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>
【问题讨论】:
【参考方案1】:嗯...我 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
【讨论】:
我在SetEnvIf
和CustomLog
的实现中遗漏了一些东西...我的具体问题在这里:***.com/q/16154718/32836 并希望您的洞察力...
我正在获取名为“access_$username.log”的日志文件。它没有扩展变量。有什么想法吗?
我也无法让变量展开。我尝试了一堆 $、%e、引号和不带引号的组合。我在这里发现link 添加冒号可以消除警告,但它仍然没有扩展。【参考方案2】:
根据Apache CustomLog Directive manual (mod_log_config module),可以指定一个程序而不是一个文件,这个程序会将日志接收到它的STDIN。
然后可以轻松地解析该日志消息以检查消息来自哪个路径(因此是哪个用户)并将其写入特定文件(例如以用户名命名)。
【讨论】:
以上是关于如何根据 mod_userdir 的用户拥有单独的 Apache2 日志文件?的主要内容,如果未能解决你的问题,请参考以下文章