我想根据 $host 变量提供正确的 SSL 证书,但对于 *.mydomain.com 或 mydomain.com 等主机除外
这些证书分为两类:
- 本地证书:*.mydomain.com mydomain.com
- 外部证书:www.user1.com www.user2.com
重要的是要知道 www.user1.com 和 www.user2.com 已设置 CNAME 以指向 user1.mydomain.com 和 user2.mydomain.com,这意味着它们被处理 *.mydomain.com 的同一服务器部分捕获,但 $host 的值保持为 www.user1.com 或 www.user2.com。这意味着我必须在一个 server {} 块中处理这个问题。
基于此,我想使用 if 语句检查 $host 变量是否是 *.mydomain.com 或 mydomain.com 的子域并加载我的证书。如果不是,我想检查用户的证书是否存在于 /etc/$host/certificate 中并加载该证书。
我对 nginx 比较熟悉,也读过有人不喜欢 if 语句,现在我想知道完成这项工作的最佳方法是什么。我已经做了很多工作,只剩下最后一步了。
答案1
所有由同server
一块提供服务的主机应使用相同的证书。请重新颁发证书或创建重复的server
块。
据称在 nginx 1.16 中可以使用变量来指定SSL 证书使用,但我从未发现有人能做到这一点。无论如何,您只能将指令放在块中server
,它在内部不起作用if
。