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

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

如何设置 apache2(或者可能是 nginx)以通过 HTTP 和 HTTPS 为同一组虚拟主机提供服务?

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

我正在考虑使用 proxypass 来实现它,但是,首先,它似乎有点无效,其次,我不确定它是否安全(即,服务器不能通过 HTTPS 询问一些不相关的主机);而且我(还)不知道如何在 apache 中设置它。

编辑:重复配置部分是不可取的,即它仍然是最后的解决方案。

答案1

第一的配置 apache 监听 http 和 http 端口使用Listen指令。

然后,设置您的NameVirtualHost指令和虚拟主机。Apache 文档关于虚拟主机的设置

您可能要做的就是复制 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>

答案2

将 Vhost 配置粘贴到 .inc 文件中,并

$ cat mysite.inc
服务器名称 www.domain.tld
DocumentRoot /www/域名
.....

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

<虚拟主机 *:443>
 SSLEngine 开启
 SSL证书文件 bla
 SSLCertificateKeyFile bla
 SSL证书链文件 bla
 包括 conf/mysite.inc
</虚拟主机>

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

答案3

<VirtualHost *:80 *:443> 在语法上可以起作用(与 <VirtualHost *:*> 一样)。

我从您关于拥有通配符证书以及您在子域中提供的所有内容的评论中假设您知道 SSL 和基于名称的虚拟主机并不总是能很好地混合使用。

答案4

毕竟,我已经在 nginx 上配置了

server {
    include common_listen.conf;

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

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

(似乎需要 nginx 0.8.x)和ssl_certificate基本配置。

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

有点相关的问题是:nginx HTTPS 服务与 HTTP 具有相同的配置Nginx 是否需要像 Apache 一样为每个通过 HTTPS 提供服务的站点提供唯一的 IP 地址?(尽管就我而言,SNI 是不必要的)。

相关内容