同一组虚拟主机通过https和http(与apache2或nginx)

我如何设置apache2(或可能是nginx)通过HTTP和HTTPS服务于同一组虚拟主机?

证书部分不是问题 – 所有虚拟主机都在一个子域内,我使用通配符证书。

我正在考虑使用代理通行证,但是,首先,它似乎稍微低效,其次,我不确定是否安全(即不能通过HTTPS询问服务器是否有不相关的主机); 我还没有(看)如何可以在Apache中设置。

编辑:configuration部分的重复是不可取的,即它仍然是最后的解决scheme。

首先configurationapache使用Listen指令来监听http和http端口 。

然后,设置您的NameVirtualHost指令和虚拟主机。 虚拟主机上的Apache Docs设置

可能你会做的是复制你的VirtualHost部分,如下所示:

 <VirtualHost *:80> ServerName www.domain.tld ServerAlias domain.tld *.domain.tld DocumentRoot /www/domain </VirtualHost> <VirtualHost *:443> ServerName www.domain.tld ServerAlias domain.tld *.domain.tld DocumentRoot /www/domain </VirtualHost> 

将Vhostconfiguration粘贴到.inc文件中。 并拥有

 $ cat mysite.inc
 ServerName www.domain.tld
 DocumentRoot / www /域
 .....

 $ cat mysite.conf
 <VirtualHost *:80>
 包括conf / mysite.inc
 </虚拟主机>

 <VirtualHost *:443>
  SSLEngine上
  SSLCertificateFile bla
  SSLCertificateKeyFile bla
  SSLCertificateChainFile bla
 包括conf / mysite.inc
 </虚拟主机>

请注意,您不能使用SSL的服务器别名,至less不是很容易。 你可以用通配符证书和/或多个CN来解决这个问题

<VirtualHost *:80 *:443>将在语法上工作(如同<VirtualHost *:*>)。

我从你的评论中假设你有一个通配证书,你所服务的一切都在子域名中,你知道SSL和基于名字的虚拟主机并不总是混合良好。

毕竟,我已经用nginxconfiguration它了

 server { include common_listen.conf; 

在每个虚拟主机和common_listen.conf中:

 listen [::]:80; listen [::]:443 ssl; 

(这似乎需要nginx 0.8.x)和ssl_certificate在基本configuration。

使用listen 443 default ssl; 多次在nginx中似乎是不正确的。

有些相关的问题是: nginx HTTPS与HTTPconfiguration相同 , Nginx是否需要通过HTTPS为Apache服务的每个站点都有唯一的IP地址? (虽然在我的情况下SNI是不必要的)。