两个站点有两个不同的日志文件 - SSL Apache2 Ubuntu

Two sites with two different log files - SSL Apache2 Ubuntu

我在同一个网络服务器上有两个网站 (Ubuntu 16.04.2 LTS - Apache/2.4.18)。当我尝试使用 HTTP(端口 80)访问这两个网站时,一切正常。这是 vhosts.conf 文件内容:

<VirtualHost *:80>
    ServerName site1
    DocumentRoot /var/www/html/site1
    ErrorLog ${APACHE_LOG_DIR}/site1_error.log
    CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
</VirtualHost>
<VirtualHost *:80>
    ServerName site2
    DocumentRoot /var/www/html/site2
    ErrorLog ${APACHE_LOG_DIR}/site2_error.log
    CustomLog ${APACHE_LOG_DIR}/site2_access.log combined
</VirtualHost>

因此,可以通过 "mydomain.com/site1" 和 "mydomain.com/site2" 访问这两个站点。我已经安装了一个 Let's Encrypt 证书,为了让它工作,我配置了一个虚拟主机,如下所示:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName mydomain.com
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/site_error.log
    CustomLog ${APACHE_LOG_DIR}/site_access.log combined
    SSLCertificateFile /etc/letsencrypt/live/mydomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

我可以使用 SSL(端口 443)成功访问这两个站点,但我不能为不同的站点使用不同的日志文件。我试过这样的事情:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName mydomain.com/site1
    DocumentRoot /var/www/html/site1
    ErrorLog ${APACHE_LOG_DIR}/site1_error.log
    CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
    Alias /site1 /var/www/html/site1
    SSLCertificateFile /etc/letsencrypt/live/mydomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
<VirtualHost *:443>
    ServerName mydomain.com/site2
    DocumentRoot /var/www/html/site2
    ErrorLog ${APACHE_LOG_DIR}/site2_error.log
    CustomLog ${APACHE_LOG_DIR}/site2_access.log combined
    Alias /site2 /var/www/html/site2
    SSLCertificateFile /etc/letsencrypt/live/mydomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

但是没用。如何区分两个站点以便有两个不同的日志文件?

根据 CBroe 提出的 link,我找到了使用 SetEnvIf 指令的解决方案。最终的工作虚拟主机配置如下所示:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName mydomain.com
    DocumentRoot /var/www/html
    SetEnvIf Request_URI ^/site1(/|$) site1
    SetEnvIf Request_URI ^/site2(/|$) site2
    CustomLog ${APACHE_LOG_DIR}/site1_access.log combined env=site1
    CustomLog ${APACHE_LOG_DIR}/site2_access.log combined env=site2
    ErrorLog ${APACHE_LOG_DIR}/site_error.log
    SSLCertificateFile /etc/letsencrypt/live/mydomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>