You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu Apache2环境下SSL站点配置独立日志文件问题

解决同一域名下子目录站点的SSL独立日志配置问题

首先得指出你之前踩的坑:Apache的ServerName指令只能设置纯域名(比如mydomain.com),不能包含URL路径(像mydomain.com/site1这种格式完全不被Apache识别),所以你那两个带路径的<VirtualHost *:443>配置根本不会被匹配到,日志自然无法分开。

下面给你两种可行的解决方案,根据你的需求选就行:

方案一:同一VirtualHost内用条件化日志(无需修改域名)

如果不想改动现有域名结构,我们可以利用SetEnvIf标记不同子目录的请求,再让CustomLog根据标记写入对应日志。访问日志可以完美分开,错误日志如果不需要严格拆分,用主日志配合标记也能区分,或者你也可以用更复杂的方式拆分(后面会提)。

配置示例:

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerName mydomain.com
        DocumentRoot /var/www/html

        # 给/site1和/site2开头的请求打上环境变量标记
        SetEnvIf Request_URI "^/site1(/.*)?$" SITE=site1
        SetEnvIf Request_URI "^/site2(/.*)?$" SITE=site2

        # 主错误日志(如果需要拆分错误日志,可以用管道日志配合脚本,不过日常用主日志也足够)
        ErrorLog ${APACHE_LOG_DIR}/site_error.log

        # 根据环境变量写入独立访问日志
        CustomLog ${APACHE_LOG_DIR}/site1_access.log combined env=SITE=site1
        CustomLog ${APACHE_LOG_DIR}/site2_access.log combined env=SITE=site2
        # 可选:处理不属于这两个站点的请求日志
        CustomLog ${APACHE_LOG_DIR}/other_access.log combined env=!SITE

        # 配置子目录的Alias和访问权限(确保站点可正常访问)
        Alias /site1 /var/www/html/site1
        <Directory /var/www/html/site1>
            Options FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>

        Alias /site2 /var/www/html/site2
        <Directory /var/www/html/site2>
            Options FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>

        # SSL证书相关配置
        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>

配置说明:

  • SetEnvIf会检查请求的URI,给所有以/site1或/site2开头的请求加上对应的环境变量。
  • CustomLog的env参数会只在环境变量匹配时,将日志写入对应文件,实现访问日志独立。
  • 如果一定要拆分错误日志,可以借助mod_unique_id和自定义日志处理脚本,但这个步骤相对繁琐,对于大多数场景,主错误日志里的请求已经带有URI路径,足够区分是哪个站点的错误。

方案二:使用子域名配置独立VirtualHost(更清晰的长期方案)

如果你可以修改DNS记录,推荐用子域名(比如site1.mydomain.com和site2.mydomain.com)来区分站点,这样每个站点可以拥有独立的VirtualHost,日志配置会更直观,未来扩展也更方便。

步骤:

  1. 修改DNS记录:添加两个A记录,site1.mydomain.com和site2.mydomain.com都指向你的服务器IP。
  2. 更新Let's Encrypt证书:重新申请证书,包含这两个子域名:
    sudo certbot certonly --apache -d mydomain.com -d site1.mydomain.com -d site2.mydomain.com
    
  3. 配置SSL VirtualHost:
<IfModule mod_ssl.c>
    # site1的独立VirtualHost
    <VirtualHost *:443>
        ServerName site1.mydomain.com
        DocumentRoot /var/www/html/site1

        ErrorLog ${APACHE_LOG_DIR}/site1_error.log
        CustomLog ${APACHE_LOG_DIR}/site1_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>

    # site2的独立VirtualHost
    <VirtualHost *:443>
        ServerName site2.mydomain.com
        DocumentRoot /var/www/html/site2

        ErrorLog ${APACHE_LOG_DIR}/site2_error.log
        CustomLog ${APACHE_LOG_DIR}/site2_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>

    # 主域名的VirtualHost(保留原有访问入口)
    <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>

配置说明:

每个子域名对应独立的VirtualHost,你可以直接在各自的块里配置独立的ErrorLog和CustomLog,完全和你之前HTTP的配置逻辑一致,理解和维护起来都更简单。

不管选哪种方案,配置完成后记得重启Apache生效:

sudo systemctl restart apache2

内容的提问来源于stack exchange,提问作者Fran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:46:08