面向 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 添加到购物车按钮

使用自定义文本将项目添加到 Magento 购物车

如何显示 WooCommerce 产品的自定义分类?

是否可以在前端的分组产品下显示关联产品的自定义属性? (马金托)

显示 WooCommerce 产品属性的自定义分类术语图像

在Woocommerce单个产品页面中显示高于产品价格的自定义字段