我目前正在构建一个使用 acme/autocert 的服务。要将该服务用于超过 1 个副本,我必须编写一个持久缓存接口,如 DirCache。然后我注意到,在重新启动服务后,缓存中的所有有效证书在启动时都被忽略了。以下序列始终发生:
缓存放acme_account+key(即使存在缓存中)
缓存获取acme_account+key
缓存获取 my.domain.net(它返回缓存的证书)
缓存获取acme_account+key
缓存放my.domain.net+token
缓存放HASH+http-01
缓存删除HASH+http-01
缓存删除my.domain.net+token
缓存放入 my.domain.net(放入新证书)
这是正确的行为吗?因为每个副本都会创建自己的证书,并且在这种情况下不可能使用持久缓存
这是我的经理工厂
func NewManager(d *db.DynamoDB, staging bool) *Manager {
manager := &Manager{
CertCache: NewPersistentCertCache(d),
}
directoryURL := acme.LetsEncryptURL
if staging {
directoryURL = LetsEncryptStagingURL
log.Infof("Using CA staging environment")
}
log.Infof("CA URI %s", directoryURL)
client := &acme.Client{
DirectoryURL: directoryURL,
}
manager.AcmeManager = &autocert.Manager{
Prompt: autocert.AcceptTOS,
HostPolicy: manager.AllowHostPolicy,
Cache: manager.CertCache,
Client: client,
}
return manager
}
喵喔喔
相关分类