如何使用let crypt进行海量虚拟主机?

如何使用let crypt进行海量虚拟主机?

我使用 Apache VirtualHost 在单个 IP 地址上运行 2500 个公共域(例如 www.example.com、example.com、www.example.net 和 example.net)。

我想为所有这些域设置 LetsEncrypt。推荐的方法是什么?有自动化工具可以做到这一点吗?

解决方案应该是:

  • 事实证明有效(不是猜测)
  • 完全的
  • 在单个 IP 上工作

我的部分的活动部分<VirtualHost>如下所示:

<VirtualHost *:80>
  # www.sub.example.com -> sub.example.com/html/                                                  
  RewriteCond ${lowercase:%{SERVER_NAME}} ^(www\.)?(.*)
  RewriteRule ^/(.*)$ /home/hotels/%2/html/$1
</VirtualHost>

答案1

首先,您需要Apache v2.2.12或稍后OpenSSL v0.9.8j使用 SNI 在单个 IP 地址上支持多个 SSL 证书。在继续之前,请检查您的服务器并验证 Apache Web 服务器的版本。如果您的机器不支持这些或更高版本,您将需要升级。

Digicert 有一篇很好的文章在 Apache 中通过一个 IP 地址使用多个 SSL 证书

如前所述,您需要为每个域创建一个单独的虚拟主机。每个虚拟主机都有自己的 SSL 证书配置。让我们加密将允许您使用通配符或多服务器规范为每个域创建一个 SSL 证书certbot

数字海洋有一篇文章如何设置 Let's Encrypt 证书其中还包括certbot在 Ubuntu 上安装。如果你的服务器不是 Ubuntu 那么获取来自 certbot 的安装说明。此外,您可能需要让我们加密文档

您可以使用以下指令通过 certbot 为每个域创建 SSL 证书:

certbot --apache -d example.com -d www.example.com
certbot --apache -d example.net -d www.example.net

请注意,每个命令适用于不同的域,但每个域可以有多个主机名。

在您的 apache 配置中,您为每个域创建一个虚拟主机

NameVirtualHost *:443

<VirtualHost *:443>
 ServerName www.example.com
 ServerAlias example.com
 DocumentRoot /var/www/site
 SSLEngine on
 SSLCertificateFile /path/to/www_example_com.crt
 SSLCertificateKeyFile /path/to/www_example_com.key
 SSLCertificateChainFile /path/to/LetsEncrypt.ca
</VirtualHost>

<VirtualHost *:443>
 ServerName www.example.net
 ServerAlias example.net
 DocumentRoot /var/www/site2
 SSLEngine on
 SSLCertificateFile /path/to/www_example_net.crt
 SSLCertificateKeyFile /path/to/www_example_net.key
 SSLCertificateChainFile /path/to/LetsEncrypt.ca
</VirtualHost>

根据您收到的证书类型和 Apache 的版本,您可能必须指定实际的 IP 地址<VirtualHost 192.168.1.3:443>而不是<VirtualHost *:443>

保持端口 80 虚拟主机<VirtualHost *:80>完好无损,以支持非 SSL 入站流量。您需要创建多达 2500 个虚拟主机来支持 SSL。在投入之前,先测试一两个。

不要忘记启用 Apache SSL 模块

a2enmod ssl

答案2

避免维持2500个人<VirtualHost>的目光https://github.com/varnish/hitch/blob/master/docs/vhosts.md

将证书放入/home/hotels/*/certs/

./hitch --backend=localhost:80 \
--frontend=[*]:443 \
/home/hotels/*/certs/*.pem

(未经测试)。

相关内容