我在/ var / www中有两个目录(例如/ var / www / app1和/ var / www / app2),我想将错误日志发送到不同的文件。两者都属于同一个域,因此我认为我不能将它们放在不同的虚拟主机下。因此,举例来说,我会将它们视为:
我看到了这个页面:
Generate access logs for different subdirectories in Apache
其解决方案适用于访问日志。但是,“env”参数似乎不适用于ErrorLog指令。
在此“发现”之前,我正在研究这个问题,这似乎是错误的:
<VirtualHost *:80>
ServerAdmin ray@localhost
DocumentRoot /var/www/app1
<Directory />
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order deny,allow
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/app1/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/app1/access.log combined
</VirtualHost>
我对自己应该做的事情感到有些迷茫。也就是说,如果有一些方法可以使ErrorLog工作,或者我应该继续尝试为每个目录配置虚拟主机。任何帮助,将不胜感激!谢谢!
答案 0 :(得分:8)
为什么在Directory
上下文中为/
设置VirtualHost
个选项?使用<Directory /var/www/app1>
代替<Directory />
由于Apache ErrorLog directive docs的上下文为server config, virtual host
- 这意味着只能为整个服务器或VirtalHost
定义ErrorLog,而不是Directory
。因此,如果要将不同的日志发送到不同的文件,请尝试使用SetEnvIf
设置Env变量。取决于您所在的目录,它应该类似于SetEnvIf Request_URI ^\/a1\/ a1
和SetEnvIf Request_URI ^\/a2\/ !a1
。然后根据a1
环境变量写入日志。
答案 1 :(得分:1)
最后我做了,首先为每个文件夹创建内部子域,并使用proxypass传递子域内容。
启用apache mods:
a2enmod authz_core dir proxy proxy_http
<强>的/ etc /主机强>
127.0.0.1 localhost
127.0.0.1 a.localhost
127.0.0.1 b.localhost
<强> /etc/apache2/sites-available/default.conf 强>
<VirtualHost *:80>
ServerName localhost
ServerAdmin fake@mail.com
DocumentRoot "/dev/null"
ProxyPass /a http://a.localhost/
ProxyPassReverse /a http://a.localhost/
ProxyPass /b http://b.localhost/
ProxyPassReverse /b http://b.localhost/
LogLevel debug
ErrorLog ${APACHE_LOG_DIR}/default-error.log
CustomLog ${APACHE_LOG_DIR}/default-access.log combined
</VirtualHost>
<强> /etc/apache2/sites-available/a.conf 强>
<VirtualHost *:80>
ServerName a.localhost
ServerAdmin fake@mail.com
DocumentRoot "/Publikoa/a"
<Directory "/Publikoa/a">
DirectoryIndex index.html
Require all granted
</Directory>
LogLevel debug
ErrorLog ${APACHE_LOG_DIR}/a-error.log
CustomLog ${APACHE_LOG_DIR}/a-access.log combined
</VirtualHost>
<强> /etc/apache2/sites-available/b.conf 强>
<VirtualHost *:80>
ServerName b.localhost
ServerAdmin fake@mail.com
DocumentRoot "/Publikoa/b"
<Directory "Publikoa/b">
DirectoryIndex index.html
Require all granted
</Directory>
LogLevel debug
ErrorLog ${APACHE_LOG_DIR}/b-error.log
CustomLog ${APACHE_LOG_DIR}/b-access.log combined
</VirtualHost>
启用网站:
a2ensite default a b
重启apache:
/etc/init.d/apache2 restart
答案 2 :(得分:0)
为每个目录设置自定义ID,您可以按以下目录将日志分开:
<Directory app1>
SetEnv app1
</Directory>
<Directory app2>
SetEnv app2
</Directory>
CustomLog ${APACHE_LOG_DIR}/site1.log combined env=subwebsite1
CustomLog ${APACHE_LOG_DIR}/site2.log combined env=subwebsite2