面向 SaaS 产品客户的自定义域功能
Posted
技术标签:
【中文标题】面向 SaaS 产品客户的自定义域功能【英文标题】:Custom domain feature for saas product customers 【发布时间】:2018-06-21 22:09:16 【问题描述】:我已经构建了一个带有 angular 4 与 golang rest api 集成的 saas 产品,并将构建上传到 aws ec2 实例。我的项目是一个基于多租户的应用程序,它在 Mercer-name.mystore.com 子域上加载客户仪表板,但一些客户要求自定义域功能,例如他们应该能够在 mydomain.com 上加载应用程序。
我已经在 apache2.conf 文件中使用以下代码完成了子域部分,因此所有子域都从 Angular 应用程序文件所在的应用程序文件夹中加载
<VirtualHost *:80>
ServerAlias *.mystore.com
DocumentRoot /var/www/html/apps
<Directory "/var/www/html/apps">
AllowOverride All
Require all Granted
</Directory>
</VirtualHost>
对于自定义域功能,我在管理员中有一个部分来保存自定义域,但不知道应该如何实现它。
我想到的可能的方法是
-
创建虚拟主机文件并在每个商家注册时使用其自定义域进行更新
以某种方式使用 htaccess 文件和 mod_rewrite 进行操作
Shopify 会这样做,但不确定他们如何加载特定于商家的商店。让我忙于思考的另一点是我应该要求更新哪些值
-
域名注册商的 IP 地址
名称服务器(不确定我在 aws 上的用途)
按照某些文章的建议要求创建 CNAME 或 A 记录
【问题讨论】:
【参考方案1】:我在我开发和管理的许多 SaaS 平台上都有类似的设置。正如您的客户所建议的那样,这种类型的设置当然是可取的。您应该从一开始就计划在自己的域上为每个客户站点提供服务,可能也使用 *SSL。在我看来,这是当今架构良好的 Saas 服务的最佳实践。
在阅读您的问题时,我认为您有点过度设计它。
对于同一服务器上的自定义域 Saas 应用,您只需将端口 80 开放给所有流量,无论域名如何。将所有客户域指向 app.mystore.com
,这是指向您的应用端点的 CNAME。
然后应用程序读取 HTTP 请求标头,并以此方式确定所请求的主机名。
最后,应用程序在其客户端数据库中查找主机名,并找到给定客户域的客户端记录。
例如,在 nginx 中你只需要:
server
listen 80 default_server;
server_name _;
root /var/www/myservice/htdocs;
此服务器配置为指向此端点的任何域提供了包罗万象的功能。
这就是允许 Web 服务器响应任何客户域所需的全部内容。该应用必须完成其余的工作。
* 当您在此域上的应用程序上提供自定义域时,您应该计划为该域提供 SSL 端点,例如 https://www.mycustomdomain.com。在您的架构设计中考虑这一点。如果您的应用故障转移到新 IP,还要考虑 DNS 问题。
【讨论】:
如何在服务器上为不受您控制的域安装第 3 方 SSL 证书。我有一切使用 CNAME 即 vanity.mycompany.com 映射到 app.mysaas.com 。 mysaas.com 有一个通配符证书 *.mysaas.com 和 vanity.mycompany.com 有它自己的证书,但我不知道如何停止安全警告以上是关于面向 SaaS 产品客户的自定义域功能的主要内容,如果未能解决你的问题,请参考以下文章
在 Woocommerce 中的产品自定义循环上启用 Ajax 添加到购物车按钮