在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>
Run Code Online (Sandbox Code Playgroud)
在另一个配置文件中,我想覆盖它们中的一个,即CustomLog设置,以便日志转到其他地方.我不想复制或搞乱所有其他设置,例如ScriptAlias.但我仍然希望它适用于<VirtualHost *:80>.
那可能吗?
我试过这个
/etc/apache2/sites-enabled/001-mylog:
<VirtualHost *:80>
CustomLog ${APACHE_LOG_DIR}/my.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这没有任何影响,大概是因为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配置文件的fork.
Apache HTTP Server - 核心文档相当模糊:
收到请求后,服务器首先根据本地IP地址和端口组合将其映射到最佳匹配.非通配符具有更高的优先级.如果根本不发生基于IP和端口的匹配,则使用"主"服务器配置.
如果多个虚拟主机包含最匹配的IP地址和端口,则服务器会根据请求的主机名从这些虚拟主机中选择最佳匹配.如果未找到匹配的基于名称的虚拟主机,则将使用与IP地址匹配的第一个列出的虚拟主机.因此,给定IP地址和端口组合的第一个列出的虚拟主机是该IP和端口组合的默认虚拟主机.
<VirtualHost> 表现得不像 <Directory>非常混乱,它看起来好像对于<VirtualHost>指令,只考虑一个匹配的实例.但是对于eg <Directory>指令,它们被添加/组合,因此:
<Directory "/some/dir">
Options Indexes MultiViews FollowSymLinks
</Directory>
<Directory "/some/dir">
AllowOverride None
Order deny,allow
Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)
相当于:
<Directory "/some/dir">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)
但这种机制不适用于<VirtualHost>:-(
我对多个虚拟主机(虚拟主机)定义也有同样的困惑。它们是否覆盖(重新定义)、重叠?还是里面还有其他不可告人的细节?
我找到了这个难题的一些链接如下:
https://www.thegeekstuff.com/2011/07/apache-virtual-host/
https://httpd.apache.org/docs/2.4/vhosts/examples.html
考虑到里面的这些例子,我可以说虚拟主机的定义是不一样的(即使它们看起来是一样的)。区别主要在于定义里面的SeverName。Apache httpd 服务器根据内部的ServerName(每个虚拟主机定义)来区分不同的虚拟主机定义,而不是标头中列出的 IP 地址或端口号。<VirtualHost>
这个谜题不断出现,因为缺乏对该主题的明确解释(在网络中)。我希望这篇文章能在某种程度上帮助缓解这个令人难以置信的问题。
| 归档时间: |
|
| 查看次数: |
3208 次 |
| 最近记录: |