覆盖默认Apache中的单个设置<;虚拟主机>;块

覆盖默认Apache中的单个设置<;虚拟主机>;块,apache,vhosts,Apache,Vhosts,在debian的默认apache2配置中,/etc/apache2/sites enabled/000 default包含许多默认虚拟主机的设置: <VirtualHost *:80> # Many good settings here, among them: CustomLog ${APACHE_LOG_DIR}/access.log combined ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ </Virtual

在debian的默认apache2配置中,
/etc/apache2/sites enabled/000 default
包含许多默认虚拟主机的设置:

<VirtualHost *:80>
    # Many good settings here, among them:
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
</VirtualHost>
这没有任何效果,大概是因为apache只查看第一个
部分,并且
/etc/apache2/sites enabled/000默认值在
/etc/apache2/sites enabled/001 mylog
之前加载

相反,我尝试将相同的代码片段放在
/etc/apache2/conf.d/mylog
中,在
/etc/apache2/sites enabled/000 default
之前加载,因为
/etc/apache2/apache2.conf
包含已启用的站点之前有一个
包含conf.d/
。这确实覆盖了我想要的
CustomLog
值。但是现在来自
/etc/apache2/sites enabled/000 default的
ScriptAlias
没有生效

我希望避免重复
/etc/apache2/sites enabled/000 default
中的所有内容,从而有效地创建默认debian apache配置文件的分支

文档 这是否相当含糊:

当收到请求时,服务器首先将其映射到最佳匹配 仅基于本地IP地址和端口组合。 非通配符具有更高的优先级。如果没有基于IP和端口的匹配发生 总之,使用“主”服务器配置

如果多个虚拟主机包含最佳匹配的IP地址和端口,则 服务器根据请求的数据从这些虚拟主机中选择最佳匹配 主机名。如果未找到匹配的基于名称的虚拟主机,则第一个 将使用与IP地址匹配的列出的虚拟主机。因此,, 给定IP地址和端口组合的第一个列出的虚拟主机是 该IP和端口组合的默认虚拟主机

的行为与
非常令人困惑的是,在我看来,对于
指令,只考虑一个匹配实例。但对于例如
指令,它们被添加/组合,以便:

<Directory "/some/dir">
        Options Indexes MultiViews FollowSymLinks
</Directory>
<Directory "/some/dir">
        AllowOverride None
        Order deny,allow
        Allow from all
</Directory>

选项索引多视图跟随符号链接
不允许超限
命令拒绝,允许
通融
相当于:

<Directory "/some/dir">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Allow from all
</Directory>

选项索引多视图跟随符号链接
不允许超限
命令拒绝,允许
通融
但是这种机制不适用于
:-(


编辑:这与不同,因为debian的默认虚拟主机不使用这些解决方案中的任何一个。但也许其他人可以从这个答案中找到灵感。

我对多个虚拟主机(虚拟主机)的定义也有同样的困惑。它们是否覆盖(重新定义)、重叠?或者内部有其他隐藏的细节

我找到了一些关于这个谜题的链接如下:

对于这些示例,我可以说vhost的定义是不一样的(即使它们看起来是一样的)。区别主要在于SeverName内部定义。Apache httpd服务器根据ServerName内部(每个vhost定义)区分不同的vhost定义,不是
标题中列出的IP地址或端口号


这个谜题来来往往,因为这个话题(在网上)缺乏明确的解释。我希望这篇文章能在某种程度上缓解这个令人困惑的问题。

谢谢你的回答。虽然我必须承认我不知道该怎么理解它-我不明白你的意思。例如,我在我的示例中根本没有提到服务器名。它如何回答我的问题:“在另一个配置文件中,我想覆盖其中的一个,即CustomLog设置……这可能吗?“很抱歉回复太晚,最近我的项目太忙。我的意思是:Header不能单独工作,它与内部的ServerName值一起工作。因此,要区分不同的虚拟主机定义,必须同时检查它们。这就是为什么虚拟主机定义的行为不同于目录定义的行为。”。
<Directory "/some/dir">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Allow from all
</Directory>