应该VirtualHost块包含在节?

应该VirtualHost块包含在节?

我经常看到 VirtualHost 配置的示例,<Directory>其中块被放置在节之外,<VirtualHost>如下所示:

# /etc/httpd/conf.d/example1.conf

<Directory /var/www/html/example1>
    Require all granted
</Directory>

<VirtualHost *:80>
    DocumentRoot "/var/www/html/example1"
    ServerName www.example.com
    ServerAlias example.com
    ServerAdmin [email protected]
    ErrorLog "/var/log/httpd/error_log_example1"
    CustomLog "/var/log/httpd/access_log_example1" combined
</VirtualHost>

下面的例子不是<Directory>包含了块吗之内<VirtualHost>节在语义上更正确吗?

# /etc/httpd/conf.d/example2.conf

<VirtualHost *:80>

    <Directory /var/www/html/example2>
        Require all granted
    </Directory>

    DocumentRoot "/var/www/html/example2"
    ServerName www.example.org
    ServerAlias example.org
    ServerAdmin [email protected]
    ErrorLog "/var/log/httpd/error_log_example2"
    CustomLog "/var/log/httpd/access_log_example2" combined

</VirtualHost>

第二种方法对我来说似乎是正确的,因为该块属于单个 VirtualHost,并且如有必要,将覆盖主 httpd.conf 中的设置。

编辑:如果启用了 TLS/SSL,第二种方法将需要复制块<Directory>,这不是很 DRY。因此,第一种方法似乎是正确的。

答案1

从 Apache 文档开始配置部分

  • <Directory>按照从最短目录组件到最长目录组件的顺序进行处理。例如,<Directory "/var/web/dir">将在 之前处理<Directory "/var/web/dir/subdir">

  • 如果有多个<Directory>部分适用于它们按配置文件顺序处理的同一目录。

  • 里面的部分<VirtualHost>部分是在虚拟主机定义之外的相应部分之后应用。这允许虚拟主机覆盖主服务器配置。

两个片段都是正确的,正如您的假设一样。

相关内容