【问题标题】:Two sites with two different log files - SSL Apache2 Ubuntu具有两个不同日志文件的两个站点 - SSL Apache2 Ubuntu
【发布时间】:2018-11-10 07:15:45
【问题描述】:

我在同一个 Web 服务器中有两个网站(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>

但它不起作用。如何区分两个站点以便拥有两个不同的日志文件?

【问题讨论】:

  • 第 1 步:去了解一下服务器名称是什么。提示:mydomain.com/site1 不是一个。
  • 这是我最后一次测试。我知道在这两种情况下,ServerName 应该是相同的,但是,我不知道如何区分两个站点。
  • “我如何区分两个站点以便拥有两个不同的日志文件?” - 你不能,不是只有一个域/虚拟主机,因为 CustomLog仅适用于服务器配置或虚拟主机的上下文。您想首先将其设置为mydomain1.commydomain2.com,这样您实际上就有了一些可以在技术上称为“两个不同的站点”的东西。
  • 如果我使用两个不同的服务器名称,那么问题是其中一个不是真实的,所以在错误日志中我看到类似:[ssl:warn] [pid 4017] AH01909:mydomain2.com :443:0 服务器证书不包含与服务器名称匹配的 ID
  • 检查这是否适合你,stackoverflow.com/questions/1460757/…

标签: apache ssl ubuntu-16.04 virtualhost lets-encrypt


【解决方案1】:

按照 CBroe 提出的链接,我通过使用 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 2013-10-03
    • 1970-01-01
    • 2018-11-25
    • 2012-03-03
    • 2017-02-15
    • 1970-01-01
    相关资源
    最近更新 更多