我是一名 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.com和https://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>