我有许多服务在同一台机器上运行,其中一个使用SSL,让我们说"c3po.com"。我的服务器的网址是 https://c3po.com
、 http://r2d2.com
和 http://jarjar.com
。
问题是,如果我输入https://r2d2.com
apache 会将我重定向到 https://c3po.com
,甚至没有更改 url。换句话说,我将看到c3po服务,我的浏览器显示http://r2d2.com
。
我知道当 Apache 无法完全匹配 vhost 时,它会使用与 ip:port 匹配的第一个加载的主机,因此没有:
<VirtualHost *:443>
ServerName r2d2.com
...
它将拾取 :443 上找到的唯一虚拟主机,即:
<VirtualHost *:443>
ServerName c3po.com
...
我真正想要的是,当用户键入https://r2d2.com
或https://jarjar.com
时,会显示错误页面,因为这些服务(通过http启用SSL)根本不存在!我怎样才能做到这一点?
检查
名称虚拟主机 *:443
在主配置中启用。然后创建一个虚拟主机,该主机使用错误页面侦听端口 443,并使用 c3po.com 的配置创建另一个虚拟主机。如果任何用户将名称解析为您的服务器的 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>