我们目前使用 HAProxy 来管理数千个域的 TLS 终止,所有域的 Let's Encrypt 证书都会定期轮换。
相关配置如下:
frontend https-in
bind *:443 ssl strict-sni no-sslv3 crt /usr/src/data/certs/
并/usr/src/data/certs/
充满了一堆.pem 文件。
SSL 证书一直在变化,因为它们需要单独续订,或者新域名从我们的系统中添加/删除。现在我们通过批量写入所有证书并/usr/src/data/certs/
执行 haproxy 的零停机时间重新加载来解决这个问题。这很麻烦,因为在重新加载期间我们会出现非常大的内存峰值,因为新实例会读取证书的全部负载,而旧实例会继续运行。
我们目前正在研究 HAProxy Unix Socket 命令的一些功能,并发现我们可以将许多东西动态化(ACL、Maps 等)。我想知道我们是否可以采用类似的方法来同步证书并避免不断重新加载行为。
使用 HAProxy 1.9 进行实验,但我们不会选择任何特定版本。感谢您的帮助或建议!
更新
我看到了关于操作的文档bind
这里通过数据平面 API,但它没有明确指出这些更改是如何或何时被拾取的。由于它包含一个强制重新加载的布尔值(或默认为该reload-delay
值,如果已设置),我猜想存在一个假设,即需要重新加载。
如果有人能提供引文来证实这一假设,我将不胜感激。
答案1
在 HAProxy 2.1(2019 年 11 月)中,一项新功能允许您更改 TLS 证书而无需重新加载:https://www.haproxy.com/blog/dynamic-ssl-certificate-storage-in-haproxy/