多个 SSL - 同一个 Apache 服务器上的每个域一个?

多个 SSL - 同一个 Apache 服务器上的每个域一个?

我是一名 Linux 新手。我第一次在 VPS 上设置自己的 LAMP 服务器。到目前为止一切顺利。我在仅有 1 个 IP 地址的 VPS 上托管了多个域名(这叫基于名称的虚拟托管吗?)。

我的 VPS 上的两个网站 bikestore.com 和 toystore.com 最终将成为接受信用卡信息的电子商务网站。我正在为这两个网站启用 https 版本,因此我为每个网站购买了 1 个新 IP 地址。

我正在按照本指南安装 SSL 证书: http://www.linode.com/wiki/index.php/Apache2_SSL_in_Ubuntu

在创建 /etc/apache2/sites-available/bikestore-ssl 和 /etc/apache2/sites-available/toystore-ssl 时,Apache 会知道https://bikestore.com应引用 IP 地址 1.1.1.1 和 SSL 证书 bikestore.crt,并且http://toystore.com是否应使用 SSL 证书 toystore.crt 引用 IP 地址 2.2.2.2?

检查 bikestore-ssl 和 toystore-ssl 的内容时,我不清楚 apache 如何知道将哪个 *-ssl 文件分配给哪个 https:// 域。所以我希望这里有人可以解释发生了什么,以及我是否做对了。

谢谢

答案1

Apache 会忽略文件名,您必须在虚拟主机定义中定义 IP 地址。例如,对于我的网站 pupeno.com,我有:

<IfModule mod_ssl.c>
    <VirtualHost 97.107.141.29:443>
        ServerName pupeno.com
        DocumentRoot /var/www/pupeno.com
        CustomLog /var/log/apache2/access-pupeno.com.log combined
        SSLEngine On
        SSLCertificateFile /etc/ssl/certs/pupeno.com.pem
        SSLCertificateKeyFile /etc/ssl/private/pupeno.com.pem
        #SSLOptions +FakeBasicAuth +ExportCertData +CompatEnvVars +StrictRequire
    </VirtualHost>
</IfModule>

此外,没有必要使用单独的文件。我有一个文件 pupeno.com.conf,其中包含非 SSL 和 SSL pupeno.com 虚拟主机的定义。考虑一下您想使用 a2ensite 和 a2dissite 一次性启用和禁用哪些内容。我认为http://pupeno.comhttps://pupeno.com同样的事情因此它在 pupeno.com.conf 上。

答案2

本质上,Apache 根据 IP 地址、ServerName 和 ServerAlias 条目选择要服务的 VirtualHost。对于 SSL sans-TLS,只需关注 IP 地址就足够了,因为您要为每个 VirtualHost 分配一个唯一的 IP。每个 VirtualHost 可能有一个唯一的“SSLCertificateFile”指令。

您需要的最低配置是:

<VirtualHost IP1:443>
SSLEngine On
SSLCertificateFile IP1.pem
</VirtualHost>

<VirtualHost IP2:443>
SSLEngine On
SSLCertificateFile IP2.pem
</VirtualHost>

假设您想将 DocumentRoot、mod_proxy 或 mod_rewrite 规则放入其中。例如:

<VirtualHost IP1:443>
SSLEngine On
SSLCertificateFile IP1.pem

# points to a local directory
DocumentRoot /var/www/
</VirtualHost>

<VirtualHost IP2:443>
SSLEngine On
SSLCertificateFile IP2.pem

# transparently serves the content off another webpage.
RewriteEngine On
RewriteRule ^/?(.*) http://www.non-secure-site.com/$1 [P]
</VirtualHost>

相关内容