虚拟主机阻止默认服务器

虚拟主机阻止默认服务器

我有一个用于开发的家庭服务器,我遇到的一个问题是,有时我输入一个网址,它会加载错误的网站,

例如:

https://dev.demoapp.com=>https://dev.demoapp.com(正确的)

http://dev.demoapp.com=>http://dev.mysite.com(错误)

因此我去查看了 Apache 正在加载的所有内容:

VirtualHost 配置:

*:443 是一个 NameVirtualHost

默认服务器 dev.demoapp.com(/etc/apache2/sites-enabled/dev.demoapp.com.conf:1)

端口 443 namevhost dev.demoapp.com (/etc/apache2/sites-enabled/dev.demoapp.com.conf:1)

端口 443 namevhost dev.test.com (/etc/apache2/sites-enabled/dev.test.com.conf:1)

*:80 是一个 NameVirtualHost

默认服务器 dev.mysite.com(/etc/apache2/sites-enabled/dev.mysite.com.conf:1)

端口 80 namevhost dev.mysite.com(/etc/apache2/sites-enabled/dev.mysite.com.conf:1)

端口 80 namevhost dev.local.com(/etc/apache2/sites-enabled/dev.local.com.conf:1)

我注意到某些网站出现了两次,但我不知道这是怎么回事。

我怎样才能做到这一点http://dev.mysite.com要么重定向到 https,要么直接告诉用户这是一个无效的 URL(最好诚实地重定向)

答案1

您必须定义一个单独的<VirtualHost *:80>容器,或者在适当的现有 VirtualHost 容器中ServeName /dev.demoapp.com添加一行。ServerAlias /dev.demoapp.com

<VirtualHost ..>除非您使用端口通配符,否则您不能在一个容器中为同一个 VirtualHosts 提供不同的端口。

我通常使用包含文件来处理 VirtualHosts 之间共享的所有指令,并且只将特定指令(如 SSL*)放在各个<VirtualHost ..:443>指令中(我甚至将每个 VIrtualHost 放在单独的包含文件中。)

从 Apache httpd-2.3.11 开始,不再有有效的 NameVirtualHost 指令(任何时候在多个虚拟主机中使用 IP 地址和端口组合时,都会自动为该地址启用基于名称的虚拟主机 -http://httpd.apache.org/docs/2.4/mod/core.html#namevirtualhost

此外,没有 DEFAULT VirtualHost,<VirtualHost>找到的第一个指令实际上是默认值,这意味着所有客户端请求,其 HTTP_HOST 标头未明确定义为ServerNameServerAlias在单独定义中<VirtualHost>,都将提供第一个 Virualhost 配置。

如果您想要实现“默认”VirtualHost,您可以在<VirtualHost *:80>包含任何其他文件(之前或其他)之前将容器放入中央 httpd.conf 文件中IncludeOptional /etc/apache2/sites-enabled/*.conf,或者编写位于列表顶部的 vhost 包含文件,例如 0_default-vhost.conf,带有<VirtualHost *:*><VirtualHost *>,请尝试哪一个可行。

相关内容