Apache 虚拟主机服务于不匹配的虚拟主机

Posted

技术标签:

【中文标题】Apache 虚拟主机服务于不匹配的虚拟主机【英文标题】:Apache Virtual Hosts serves the vhost NOT matched 【发布时间】:2021-08-20 08:50:01 【问题描述】:

我设置了一个带有两个虚拟主机的 Apache 服务器,它的行为非常奇怪。我有一个普通的网络服务器,在所有情况下都应该是服务器,除了在特定情况下,域名是“biblio.name”或“biblio-intra.name”,它应该被重定向到位于我笔记本电脑上的虚拟机,在 Linux 上提供另一个 Web 服务。在我的笔记本电脑上,我使用 xampp 作为 Apache 服务器。我的 apache/conf/extra 文件夹中有以下“httpd-vhosts.conf”:

<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs"
    ServerName sis.name/
    ServerAlias *
</VirtualHost>

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPass "/" "http://127.0.0.1:8080/"
    ProxyPassReverse "/" "http://127.0.0.1:8080/"
    ServerName biblio.name/
    ServerAlias biblio-intra.name/
</VirtualHost>

所以我希望它将所有请求重定向到“biblio.name”并正常处理其余请求。然而,它没有! 当我在浏览器中输入我的静态 IP 地址(从路由器分配)时,我得到了正常的 htdocs 服务,非常好。当我输入 biblio.name:8080 时,我通常也会按预期为虚拟机提供服务(显然,因为 8080 自动使用虚拟机的重定向规则。)但是,当我输入“sis.name”时,它会将我重定向到虚拟机机器,当我输入“biblio.name”时,它会从 htdocs 中为我服务。 我从来没有经历过这样的行为,我不明白,为什么它会服务于应该做的对面的主人。 我错过了什么吗?

【问题讨论】:

【参考方案1】:

出于某种原因,我不知道(不再),我所有的 apache vhost 配置对于 ServerNameServerAlias 具有相同的值。里面的/ 看起来也很奇怪。您可以尝试将 biblio-intra.name 列为第二个选项,但首先应该重复 ServerName 中的值:

<VirtualHost *:80>
    ServerName   sis.name
    ServerAlias  sis.name
    DocumentRoot "C:/xampp/htdocs"
</VirtualHost>


<VirtualHost *:80>
    ServerName        biblio.name
    ServerAlias       biblio.name biblio-intra.name
    ProxyPreserveHost On
    ProxyRequests     Off
    ProxyPass         "/" "http://127.0.0.1:8080/"
    ProxyPassReverse  "/" "http://127.0.0.1:8080/"
</VirtualHost>

【讨论】:

以上是关于Apache 虚拟主机服务于不匹配的虚拟主机的主要内容,如果未能解决你的问题,请参考以下文章

关于主配置和虚拟主机配置

Nginx服务的虚拟主机

Apache配置与应用

Web服务器群集——编译安装Apache构建虚拟主机

Apache虚拟主机and虚拟端口

更改虚拟主机后 Apache 无法启动