在debian的默认apache2配置中,/etc/apache2/sites-enabled/000-default
包含许多默认VirtualHost的设置:
<VirtualHost *:80>
# Many good settings here, among them:
CustomLog ${APACHE_LOG_DIR}/access.log combined
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
</VirtualHost>
在另一个配置文件中,我想覆盖其中的一个,即
CustomLog
设置,以便使日志进入其他位置。我不想复制或弄乱其他所有设置,例如ScriptAlias
。但是我仍然希望它适用于<VirtualHost *:80>
。那可能吗?
我尝试了什么
我试着把它放进去
/etc/apache2/sites-enabled/001-mylog
:<VirtualHost *:80>
CustomLog ${APACHE_LOG_DIR}/my.log combined
</VirtualHost>
那没有效果,大概是因为apache只看第一个
<VirtualHost>
部分,并且/etc/apache2/sites-enabled/000-default
在/etc/apache2/sites-enabled/001-mylog
之前加载。相反,我尝试将相同的片段放在
/etc/apache2/conf.d/mylog
中,该片段在/etc/apache2/sites-enabled/000-default
之前加载,因为/etc/apache2/apache2.conf
在Include conf.d/
之前具有Include sites-enabled/
。这确实覆盖了我想要的CustomLog
值。但是现在ScriptAlias
中的/etc/apache2/sites-enabled/000-default
无效。我想避免从
/etc/apache2/sites-enabled/000-default
复制所有内容,以有效地创建默认debian apache配置文件的派生。文献资料
Apache HTTP Server - core documentation具有这样的模糊性:
<VirtualHost>
的行为不像<Directory>
非常令人困惑的是,在我看来,对于
<VirtualHost>
指令,只考虑了一个匹配的实例。但是对于<Directory>
指令,它们被添加/组合在一起,以便:<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>
但是这种机制不适用于
<VirtualHost>
:-(编辑:这与Sharing configuration between several VHosts不同,因为debian的默认VirtualHost不使用任何这些解决方案。但是也许其他人可以从该答案中找到灵感。
最佳答案
对于多个虚拟主机(虚拟主机)的定义,我也有同样的困惑。它们是否覆盖(重新定义),重叠?还是里面还有其他隐蔽的细节?
我发现此难题的一些链接如下:
https://www.thegeekstuff.com/2011/07/apache-virtual-host/
https://httpd.apache.org/docs/2.4/vhosts/examples.html
考虑到内部的这些示例,我可以说虚拟主机的定义不相同(即使它们看起来相同)。区别主要在于内部定义中的 SeverName 。 Apache httpd服务器根据内部的 ServerName (每个vhost定义)区分不同的vhost定义,而不是的ipt_code头中列出的IP地址或端口号。
这个难题不断出现,因为对此主题(在网络上)缺乏明确的解释。我希望这篇文章可以在某种程度上帮助减轻这种困扰。
关于apache - 覆盖默认Apache <VirtualHost>块中的单个设置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20904278/