我有一台带有多个虚拟主机的服务器,其中大多数没有或需要 https:// 连接,但有些需要。我希望的是,当用户不小心输入“https://mynonsecuresite.com“以获取默认错误消息(或重定向到端口 80 站点)。
目前,如果有人输入https://mynonsecuresite.com/他们以某种方式被重定向到https://mysecuresite.com/
请注意,这不是 Apache 在配置设置列表中较早的虚拟主机上提供默认页面的问题,URL 实际上被更改为https://mysecuresite.com/通过看似重定向但不是 apache mod_rewrite 重定向的方式。
我尝试创建一个默认虚拟主机,它被放置在 Apache 站点启用目录中的 000-default 中。
<VirtualHost 123.123.123.123:443>
ServerName default-web
ServerAlias mynonsecuresite.com www.mynonsecuresite.com
DocumentRoot /home/virtual/default-web
ErrorDocument 404 /index.php
</VirtualHost>
重启服务器后,网站仍然重定向到https://mysecuresite.com/
查看 Apache 的重写日志,工作中并没有错误的重写,所以我不太清楚这是怎么发生的。
不确定是否相关,但这是一台 Ubuntu 12.04 服务器。我不记得这在以前的 Debian 机器上是个问题。我还安装了 shibboleth2 以便为网站提供安全联合登录。
答案1
由于请求的域名在 http 标头中(因此当 apache 必须决定使用哪个 vhost 配置时仍然是加密的),您的用户将获得https://mysecuresite.com/内容,无论他们输入什么域,只要它发送到https://mysecuresite.com/
我首先想到的是,如果 mysecuresite.com 的虚拟主机与“mysecuresite.com”不匹配,则建议在 mysecuresite.com 的虚拟主机中使用以下代码片段,将所有人重定向到所请求站点的 http 版本
RewriteEngine On
RewriteCond %{HTTP_HOST} !^mysecuresite.com$
RewriteRule ^(.*)$ http://%{HTTP_HOST}$1 [L,R]
答案2
确保浏览器支持并启用 TLS SNI 服务器名称指示,以便客户端可以向 Apache 发送所需的正确主机名。