我已经为我的网站安装了一个SSL证书,然而,5个不同的域都指向同一个主机,如果用户被导向https://(the other four)他们会得到一个很大的红色屏幕。
如果我只有一个虚拟主机似乎是全部,这是我不想要的。 我试图让另一个虚拟主机来抓住未经authentication的域名:
NameVirtualHost *:443 <VirtualHost *:443> ServerName example2.com ServerAlias example3.com DocumentRoot /srv/deadwww/ # contains nothing of consequence </VirtualHost> <VirtualHost *:443> ServerName example.com SSLEngine on SSLCertificateFile /path/to/certs/example.com.crt ...
但是Apache甚至不会启动,咆哮着:
[error] Server should be SSL-aware but has no certificate configured
所以,如果我只有一个VirtualHost条目,那么它就会捕获所有的名字,并且大部分都会失败,如果我在那之前尝试捕获这些坏名字,我不能这样做,因为Apache不会让我。 我如何解决这个问题?
没有以下三件事情之一,你无法做任何事情来解决这个问题:
如果没有这三个变化之一,你可以在Apacheconfiguration中做任何事情都不能解决这个问题,因为在SSL握手完成之后,任何types的请求redirect或者阻塞都会发生(用户必须点击证书警告,将被redirect)。
您不能以这种方式托pipe多个SSL站点; 他们每个人都需要自己的IP地址,或者你需要一个通配的安全证书: http : //wiki.apache.org/httpd/NameBasedSSLVHosts
如果您拥有5个以上的顶级域名,则可以获得“多主机”证书,该证书比5 IP和5个单独的证书便宜。 与多主机,你不会需要新的ips,或必须做出dns的变化(即在同一个IP 5个不同的fqdn)。
如果您为任何域(除了显式添加的ServerName参数之外)放置拒绝规则,该怎么办? 要阻止apache抱怨,可以在那里添加虚拟SSL证书。 我还没有尝试过,但你可能想要尝试一下。 确保你把虚拟主机部分的主要域名/网站你托pipe在下面的行上面 –
<VirtualHost *:443> ServerName example2.com ServerAlias *.example.com DocumentRoot /var/www/example2 ##put the SSL lines here <Directory /var/www/example2> Order allow,deny Order Deny,Allow Deny from all Allow from 127.0.0.1 </Directory> </VirtualHost>
不清楚你的设置的目标,但似乎只有你的五(5)域中的一(1)应该通过端口443 HTTPS,是正确的? 那么是否可以强制请求其他四(4)个HTTPS主站点?
为其他四(4)像这样创build一个VirtualHostconfiguration:
<VirtualHost *:443> ServerName example1.com ServerAlias example2.com ServerAlias example3.com ServerAlias example4.com RewriteEngine on RewriteRule ^(.*)$ http://example.com/$1 [L,R=301] ### NOTE: Might have to put dummy SSL info here. </VirtualHost>
ServerName和ServerAlias应该会捕获端口443上的所有不正确请求, example1.com , example2.com , example3.com和example4.com将其全部redirect到example.com 。 请注意,您可能必须在其中包含虚拟SSL信息,但是redirect应该可以工作。