saas产品客户的自定义域功能

时间:2018-01-12 12:32:54

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

我已经构建了一个saas产品,其中angular 4与golang rest api集成,并在aws ec2实例上上传。我的项目是一个基于多租户的应用程序,它在merchant-name.mystore.com子域上加载客户仪表板,但有些客户要求自定义域功能,例如他们应该能够在mydomain.com上加载应用程序。

我在apache2.conf文件中使用以下代码完成了子域部分,因此所有子域都从角度应用程序文件所在的应用程序文件夹中加载

<VirtualHost *:80>
    ServerAlias *.mystore.com
   DocumentRoot /var/www/html/apps
    <Directory "/var/www/html/apps">
        AllowOverride All
        Require all Granted
    </Directory>
</VirtualHost>

对于自定义域功能,我在admin中有一个部分可以保存自定义域,但不确定应该如何实现它。

我想到的可能方法是

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

    Shopify可以做但不确定他们如何加载商家特定的商店。另一点让我忙着思考的是我应该要求更新的价值

    1. 域名注册商的IP地址
    2. 名称服务器(不确定它将用于我的aws)
    3. 要求创建CNAME或A记录作为文章的一些建议

1 个答案:

答案 0 :(得分:4)

我在我开发和管理的许多SaaS平台上都有类似的设置。正如您的客户所说,这种类型的设置当然是可取的。您应该计划从一开始就在自己的域上为每个客户站点提供服务,也可能使用* SSL。在我看来,这是目前架构良好的Saas服务的最佳实践。

在阅读你的问题时,我认为你已经过度了解它。

对于同一服务器上的自定义域Saas应用,您只需将端口80打开到所有流量,无论域名。将所有客户域指向server { listen 80 default_server; server_name _; root /var/www/myservice/htdocs; } ,这是您应用端点的CNAME。

然后,应用程序读取HTTP请求标头,并以此方式确定所请求的主机名。

最后,应用程序在其客户端数据库中查找主机名,并找到给定客户域的客户端记录。

例如,在Nxinx中,您只需要:

{{1}}

此服务器配置为指向此端点的任何域提供catch all。

这就是所有Web服务器都应该允许它回答任何客户域。应用程序必须完成其余的工作。

* 当您在此域上的应用上提供自定义域时,您应该计划为域提供SSL端点,例如https://www.mycustomdomain.com。在您的架构设计中考虑这一点。如果您的应用程序故障转移到新IP,也请考虑DNS问题。