6

我在 /var/www 中有两个目录(例如 /var/www/app1 和 /var/www/app2),我希望将它们的错误日志发送到不同的文件。两者都在同一个域下,所以我认为我不能将它们放在不同的虚拟主机下。因此,例如,我将访问它们:

http://localhost/app1

http://localhost/app2

我遇到了这个页面:

为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 工作,或者我是否应该继续尝试为每个目录配置虚拟主机。任何帮助,将不胜感激!谢谢!

4

3 回答 3

8

为什么要在上下文中设置Directory选项?使用代替/VirtualHost<Directory /var/www/app1><Directory />

由于Apache ErrorLog 指令文档,它的上下文是server config, virtual host- 这意味着只能为整个服务器或为 a 定义 ErrorLog VirtalHost,而不是为 a Directory。所以如果你想将不同的日志发送到不同的文件,尝试使用SetEnvIf设置一个Env变量。根据您所在的目录,它应该类似于SetEnvIf Request_URI ^\/a1\/ a1and SetEnvIf Request_URI ^\/a2\/ !a1。然后根据a1环境变量写入日志。

于 2012-05-04T11:07:02.650 回答
3

为每个目录设置自定义 ID,您可以按目录分隔日志,如下所示:

<Directory app1>
    SetEnv app1
</Directory>
<Directory app2>
    SetEnv app2
</Directory>
CustomLog ${APACHE_LOG_DIR}/site1.log combined env=app1
CustomLog ${APACHE_LOG_DIR}/site2.log combined env=app2
于 2019-07-25T19:39:16.217 回答
2

最后我做到了,首先为每个文件夹创建内部子域,然后使用 proxypass 传递子域内容。

启用 apache 模组:

a2enmod authz_core dir proxy proxy_http

/etc/hosts

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

重启阿帕奇:

/etc/init.d/apache2 restart
于 2018-05-01T13:03:32.190 回答