Apache:在服务器名称不匹配时禁用重定向到默认虚拟主机
Posted
技术标签:
【中文标题】Apache:在服务器名称不匹配时禁用重定向到默认虚拟主机【英文标题】:Apache: disable redirecting to default vhost on mismatching server name 【发布时间】:2014-02-01 14:34:03 【问题描述】:我在同一台机器上运行了许多服务,其中一个使用 SSL,比如说“c3po.com”。
我的服务器的网址是https://c3po.com
、http://r2d2.com
和http://jarjar.com
。
问题是,如果我输入https://r2d2.com
,apache 会将我重定向到https://c3po.com
,甚至没有更改网址。换句话说,我将看到 c3po 服务,我的浏览器显示 http://r2d2.com
。
我知道,当 Apache 不能完全匹配一个虚拟主机时,它会使用第一个加载的与 ip:port 匹配的虚拟主机,所以没有:
<VirtualHost *:443>
ServerName r2d2.com
...
它将拾取 :443 上找到的唯一 vhost,即:
<VirtualHost *:443>
ServerName c3po.com
...
我真正想要的是当用户键入https://r2d2.com
或https://jarjar.com
时会显示一个错误页面,因为这些服务(通过http 启用了ssl)根本不存在!我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:检查一下
名称虚拟主机 *:443
在您的主配置中启用。然后使用您的错误页面创建一个在端口 443 上侦听的 VirtualHost,并使用 c3po.com 的配置创建另一个 VirtualHost。如果任何用户将名称解析为您的服务器的 IP(他们将用于所有站点),他们将转到默认站点,除非他们要去 c3po。
以下内容应该可行:
默认值:
<VirtualHost *:443>
ServerName _default_https
DocumentRoot /path/to/error/page
<Directory /path/to/error/page>
...
</Directory>
</VirtualHost>
c3po:
<VirtualHost *:443>
ServerName c3po.com
ServerAlias www.c3po.com
DocumentRoot /path/to/c3po
<Directory /path/to/c3po>
...
</Directory>
</VirtualHost>
【讨论】:
以上是关于Apache:在服务器名称不匹配时禁用重定向到默认虚拟主机的主要内容,如果未能解决你的问题,请参考以下文章
在没有 ServerName 的默认虚拟主机上将 HTTP 重定向到 HTTPS
在 Apache 上通过 HTTPS 将服务器别名重定向到服务器名称