我们公司建立并维护了许多 WordPress 网络,其中一些网络接近 100 个网站。
我们开发了一个使用 let's encrypt 的 wp-cli 脚本它会生成一个包含 WordPress 网络所有域的 SAN SSL 证书,我们会在 nginx 配置的服务器块中设置此 SAN 证书,ssl_certificate
以便所有网站都可以使用 HTTPS。
目前我们有一个单独的 nginx vhost 来处理整个网络,这非常实用,因此我们不必在每次创建网站时都创建一个新的 vhost。
问题是Let's Encrypt 将 SAN 证书限制为 100 个域所以我们很快将无法覆盖所有网站。
nginx 文档指出,最新版本的 nginx 在某些情况下可能会接受多个 ssl_certificate 条目,但这似乎适用于不同格式的证书(RSA、SDA 等)
以下是我的问题:
- 如果我将 SAN 拆分为 100 个块,我是否能够在单个 nginx vhost 中使用多个 ssl_certificate 条目?为此我必须升级到 nginx 1.11 吗?否则
- 有没有一个简单的解决方案来配置有限数量的虚拟主机(如果可能的话,每个网站不是一个)并共享具有有限数量的 SAN 证书的域 - 如果可能的话只使用一个 IP 地址/cname?
我们最终可以为每个网站创建一个 vhost 和一个 SSL 证书,并将所有网站指向同一个文档根目录,但是我们有一个复杂的 nginx 设置(ssl、memcached、重定向等),并且我们希望尽可能地简化网站创建过程,所以这将是最后一个(也是最需要工作的)解决方案。
谢谢。
答案1
每个 vhost 不能使用多个 ssl_certificate 条目。它的工作方式并非如此。
我建议使用配置管理系统来处理域的创建 - 目前最流行的是 ansible、puppet 和 chef。无论您选择拥有一个 vhost 服务器 100 个主机名还是只有一个主机名都取决于您,但使用 CMS 实现自动化的意义在于,无论具体配置如何,设置网站所需的手动工作量都会最小化。
答案2
当您查看某个网站的证书并看到同一张证书上有数十个不相关的网站时,我个人认为以这种方式使用 SAN 证书有点不专业且不专业。
您能否为每个站点(或者如果您愿意,每个 <= 100 个主机)创建一个 vhost 文件,而只将所有实际配置(路径/重定向/等)保留为包含文件?
server {
listen xyz;
server_name example.com
example2.com;
ssl_certificate certfile;
ssl_certificate_key keyfile;
include templates/standard-website-config;
}
在主 nginx 配置中,您只需使用类似下面的内容来包含所有 vhost 配置文件。
http {
... some_standard_http_config ....
include sites/*;
}