某个公共 SaaS 服务 a.com 需要面向多个租户,每个租户需要自定义域名和 logo 。
之前的同事设计的架构,每个租户提供一个域名,一台云服务器,域名对应的 ssl 证书,然后在云主机上部署 nginx 通过反向代理的方式将 customer.com 转发到 a.com 。
我觉得这样的设计不是最佳设计,复杂麻烦且难以运维。我见过的一些 SaaS 服务如腾讯企业邮箱,支持在管理后台上传 ssl 证书和自定义域名,如:mail.companyname.com CNAME 解析到的 ssl.exmail.qq.com 登录也是通过 mail.companyname.com 来进行登录的。实际后台服务都是腾讯的邮箱 SaaS 服务。
这个方案的代码逻辑的最佳实现是怎样做的?我知道 nginx 支持配置多个 server name 和 ssl certificate 。我想到的实现方法的逻辑是,商户登录管理平台,上传证书和填写自定义域名后,在 nginx 服务器下 生成一份 conf 文件,然后租户添加 CNAME 后指向 a.com ,就可以实现使用自己的域名 customer.com 访问了。 或者是有没有做过这个需求的人,有更优雅的实现方式?
1
idontnowhat2say OP 还有一个问题,假设 a.com 是在腾讯云上,但租户买的域名 customer.com 并且备案是在阿里云上,那么 customer.com cname 解析到 a.com 会被 sni 阻断的,因为阿里云上未对 customer.com 域名进行备案。那么这个问题该怎么解决?
|
2
julyclyde 244 天前
多个层次:
TLS 层次:可以用通配符证书、多域名证书(一般 CDN 服务商才有这个资格) 备案层次:没备案肯定是不行的 应用程序层次:可以通过读取 Host header 来区分,倒是不太依赖于前面 TLS 的处理结果 |