![如果不为每个域名设置一个文件,你该如何处理数百个带有 SSL 的域名呢?](https://linux22.com/image/781666/%E5%A6%82%E6%9E%9C%E4%B8%8D%E4%B8%BA%E6%AF%8F%E4%B8%AA%E5%9F%9F%E5%90%8D%E8%AE%BE%E7%BD%AE%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%8C%E4%BD%A0%E8%AF%A5%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86%E6%95%B0%E7%99%BE%E4%B8%AA%E5%B8%A6%E6%9C%89%20SSL%20%E7%9A%84%E5%9F%9F%E5%90%8D%E5%91%A2%EF%BC%9F.png)
背景
我目前运营一个电子商务平台,此时设置新域名时,自动脚本就会运行。它首先验证 DNS 记录,生成 Nginx 配置文件,然后使用 LetsEncrypt 生成 SSL 证书。
然而,这似乎很冗长并且效率不高,因为如果我需要进行更改(例如升级到较新版本的 php),那么我必须更新每个文件,而且,每次添加、删除或更改新域时,我都必须重新加载 Nginx。
目标
有没有办法更有效地做到这一点,以便将来更容易地实现负载平衡?
目前,当进行负载平衡时,我必须决定平衡哪些网站,并且每个网站都需要手动设置每个域。
答案1
您可以利用include
指示在 Nginx 中。
将所有常用选项放入某个文件中,并将include
该文件放在适当的位置。例如,在一个反向代理上,要添加的标头集(X-Forwarded-For
以及类似内容)和 ACME 验证 URI 的排除在所有代理虚拟主机上都是相同的,因此我将它们放入通用文件中,并server
在需要时将该文件包含在指令中。如果我需要更新(例如添加另一个标头),我只需更新该单个包含的文件即可。
至于重新加载 Nginx,这是不可避免的。当您以任何方式更改其配置时,无论是添加文件还是编辑现有文件,您都需要告诉它重新读取更新后的配置,这基本上就是 reload 所做的。这很优雅,而且这种情况很常见(不仅仅是 Nginx)。我不明白为什么要担心。它就像“应用”按钮一样。Ansible 可以为您完成(使用处理程序)。