VirtualHost 不被视为最佳匹配

VirtualHost 不被视为最佳匹配

我有一个名为的文件pga 默认配置文件看起来就像,

<VirtualHost *:8008>
    ServerName 192.168.1.10

    DocumentRoot /var/www/portals/default/public

    <Directory "/var/www/portals/default/public">
       AllowOverride All
    </Directory>
    ErrorLog /var/log/httpd/default.error.log
    CustomLog /var/log/httpd/default.requests.log combined
</VirtualHost>

问题是每当我尝试http://192.168.1.10:8008它始终加载默认的 Apache 测试页面。 默认配置文件好像,

Listen 8008
<VirtualHost _default_:8008>
    DocumentRoot "/www/default"
</VirtualHost>

但当我<VirtualHost *:8008><VirtualHost 192.168.1.10:8008>pga 默认配置文件它按预期工作。我想知道为什么会这样。据我所知,这是因为服务器没有选择 VirtualHost 作为特定 IP 地址和端口的最佳匹配。(这个答案证实了VirtualHost 上下文中 _default_:* 和 *:* 之间的区别

我也尝试了其他几种方法,但除了上述方法外,其他方法都不起作用。以下是其他方法。(更改pga 默认配置文件

  • 改成ServerName 192.168.1.10ServerName 192.168.1.10:8008
  • 用过的ServerAlias 192.168.1.10

笔记- 使用上述配置,<VirtualHost *:8008>我的一些同事已经获得了成功的结果。只有我出现了这个问题。

我在这里错过了什么?为什么其他人能获得预期的结果而我却不能?

答案1

您必须始终在每个虚拟主机中定义 ServerName。

由于您的“默认”可能首先加载,并且没有定义特定的服务器名称,因此它会抓取所有请求。您可以通过在默认虚拟主机中设置“ServerName default”轻松尝试此操作。

因此当您请求“http://192.168.1.10:8008“您现在将进入适当的虚拟主机。

所以请记住,最佳做法是始终在每个虚拟主机中定义一个唯一的 ServerName 指令,并且考虑当没有请求的主机名与定义的虚拟主机匹配时,第一个虚拟主机将接受请求,此外,如果您不小心在两个虚拟主机中定义了相同的服务器名,则第一个加载的虚拟主机将接受请求。

相关内容