我有一个网站需要回答任意数量的任意子域,例如client1.example.com
,client2.example.com
等等。一切都在 SSL 后面。
我真的很想使用 Let's Encrypt,当然,这意味着没有通配符证书。有没有办法创建一个server { ... }
加载适当目录的单个块,或者我是否需要为每个客户端子域进行单独的配置?
本质上,我想要一个server
块来响应*.example.com
,但根据子域加载适当的证书。证书都存储在 中/etc/letsencrypt/live/[subdomain].example.com/
。
答案1
我有两点看法:
据我所知(但请不要认为这是理所当然的),您不能在任何地方使用变量,包括
ssl_certificate
,因为nginx
将其视为文字字符串。但(跳出思维定势):创造证书签名请求自己动手(使用
openssl
),并将所有域名放入主题备用名称 (SAN)字段。如果您使用的是官方 Let's Encrypt 客户端,请利用选项--csr
将您创建的内容发送Certificate Signing Request
给他们。他们将解析该字段,验证域,如果成功,您将获得一签名的证书对您提供的所有域均有效。注意事项 1:目前,Let's Encrypt 限制字段中的域名数量
Subject Alternative Name
为 100 个,根据这帖子。(不确定这是否仍然正确,我找不到“官方”的东西。)注意事项 2:证书是公开的,因此任何检查您的证书的人都可以看到此证书有效的所有域。这是否可以接受取决于您的用例、环境等。
答案2
您可以使用 Nginx 外部的工具(如 sed 和 make)来创建模板来实现您想要的效果: