如何使用 Let's Encrypt 进行动态配置的大规模虚拟主机

如何使用 Let's Encrypt 进行动态配置的大规模虚拟主机

我有一台配置为使用 Apach 2.4 动态配置 vhosts 的服务器。我为一些域配置了 SSL,但我被要求使用 Let's Encrypt 免费服务为所有域提供 SSL。

Certbot对我来说有点不清楚,因为我不确定它是否适用于动态虚拟主机。

我的挑战是,每个域名都有一个子域名 subXXX.masterdomain.com 和一个别名 yourchoicedomain.com,因此我需要生成一个有效的 Let's Encrypt 证书

  • subXXX.masterdomain.com
  • www.subXXX.masterdomain.com
  • yourchoicedomain.com
  • www.yourchoicedomain.com

我没有非常复杂的 vhosts 配置文件,我使用符号链接实现域别名和 www 服务器别名。

<VirtualHost *:80>
    #ServerName masterdomain.me
    #ServerAlias *
    # get the server name from the Host: header
    UseCanonicalName Off
    # include the server name in the filenames used to satisfy requests
    VirtualDocumentRoot "/var/www/vhosts/%0/httpdocs"

    RewriteEngine On

    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteCond %{HTTPS} off
    RewriteRule .* http://www.%{HTTP_HOST}$0 [R=301,L]

    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteCond %{HTTPS} on
    RewriteRule .* https://www.%{HTTP_HOST}$0 [R=301,L]

    <Directory "/var/www/vhosts/*/httpdocs">
        AllowOverride "All"
        Options SymLinksIfOwnerMatch
        Require all granted
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

任何帮助我开始的帮助都将非常有用。

答案1

由于 certbot 无法从您的 Apache 配置中确定活动域名,因此您需要解决这个问题。

由于mod vhost alias 子目录的存在就是“激活”域名的原因我建议使用一个简单的 shell 脚本来枚举所有子目录(=所有活动域),然后使用以下命令运行 certbot--webroot选择创建类似以下内容的内容:

certbot certonly --webroot -w var/www/vhosts/www.example.com/httpdocs -d www.example.com -d example.com -w var/www/vhosts/www.example.net/httpdocs -d www.example.net -d other.example.net

答案2

Certbot 需要目录名称和域名。根据其文档,您最多可以添加 100 个,但目前还不支持通配符。

您只需要将 SSL 相关配置添加到 vhost 别名(单个配置文件),但您可以对 vhost 上提到的所有域使用相同的证书。

单个配置文件仍然可以为我工作。已试用并测试。

相关内容