我如何设置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是不必要的)。