我正在尝试使用 apache 设置一个服务器,其中每个用户的主文件夹中都有一个日志文件夹,并且所有错误/访问日志都存储在该文件夹中。
我当前的设置:
<VirtualHost *:80>
DocumentRoot /home/user/public_html
ErrorLog /home/user/logs/error.log
CustomLog /home/user/logs/access.log combined
LogLevel info
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /home/user1/public_html
ErrorLog /home/user1/logs/error.log
CustomLog /home/user1/logs/access.log combined
LogLevel info
</VirtualHost>
这种设置的问题是,如果我访问 user1 的网站
http://localhost/~user1/
所有日志都存储在 /home/user/logs/ 中,而不是 /home/user1/logs/ 中。我该如何修复此问题,以便将日志存储在正确的位置?
答案1
Apache 2.2 的 CustomLog是每个服务器或每个虚拟主机的设置,并且http://localhost/~user1/
类型 http://localhost/~user2/
URI 方案都是同一默认虚拟主机内的别名。
类似下面的方法适用于 CustomLog(ErrorLog 似乎不支持 env 修饰符)
<VirtualHost *:80>
DocumentRoot /var/www/html
ErrorLog logs/error_log
SetEnvIf Request_URI ^~user1 user1
SetEnvIf Request_URI ^~user2 user2
CustomLog /home/user1/logs/access.log combined env=user1
CustomLog /home/user2/logs/access.log combined env=user2
...
</VirtualHost>
答案2
您需要考虑的是,由于用户数量相当多,为每个用户提供自己的日志会给 apache 带来额外的资源需求。
它可以处理的日志文件数量有一个简单的限制 - 系统的文件描述符限制。
此外,您不能在单个虚拟主机内拆分错误日志。