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 配置对于 ServerName
和 ServerAlias
具有相同的值。里面的/
看起来也很奇怪。您可以尝试将 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 虚拟主机服务于不匹配的虚拟主机的主要内容,如果未能解决你的问题,请参考以下文章