【问题标题】:Custom domain feature for saas product customers面向 SaaS 产品客户的自定义域功能
【发布时间】: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>

对于自定义域功能,我在管理员中有一个部分来保存自定义域,但不知道应该如何实现它。

我想到的可能的方法是

  1. 创建虚拟主机文件并在每个商家注册时使用其自定义域进行更新
  2. 以某种方式使用 htaccess 文件和 mod_rewrite 进行操作

Shopify 会这样做,但不确定他们如何加载特定于商家的商店。让我忙于思考的另一点是我应该要求更新哪些值

  1. 域名注册商的 IP 地址
  2. 名称服务器(不确定我在 aws 上的用途)
  3. 按照某些文章的建议要求创建 CNAME 或 A 记录

【问题讨论】:

    标签: apache .htaccess amazon-web-services mod-rewrite amazon-ec2


    【解决方案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 有它自己的证书,但我不知道如何停止安全警告
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    相关资源
    最近更新 更多