我经常看到 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>
部分是在虚拟主机定义之外的相应部分之后应用。这允许虚拟主机覆盖主服务器配置。
两个片段都是正确的,正如您的假设一样。