如何在Saas App中提供指向子域的自定义域

Nas*_*sir 13 dns hosting saas

我想创建一个示例SaaS应用程序,用户可以使用自定义css注册,创建网页,使用模板和/或自定义它们,从自定义域提供网页.

我正在考虑在S3 /其他CDN上保存模板,以及media/stylesheets/js文件.虽然所有技术都可行(实用?可能有争议).无论如何,我很难搞清楚在这种情况下如何通过自定义域提供网站?例如,当他们注册时,他们可以获得一个subdomain.domain.com地址.但是,它们如何指向,customerdomain.com以便customerdomain.com输入时,它提供相同的内容customerdomain.domain.com,并保留URLcustomerdomain.com

另外,如果我想要一个" feature",那么自定义域可能是付费功能.我如何仅限付费用户?

通常,当我们设置网站时,我们在虚拟主机配置文件(apache)中指定它,并为其提供别名,以便查找并提供这些别名.在这种情况下,我不希望每个注册的人都有一个单独的vhost文件.还有其他选择吗?我该如何编程呢?有什么问题需要注意吗?

我看到的一个解决方案是让服务器为一个通配符域提供服务,即为*.domain.com每个自定义域提供单独的vhost,但是如果可以,我宁愿避免使用.

谢谢.

Gom*_*moX 7

自定义域通常通过CNAME DNS记录(DNS记录的符号链接)来完成.您告诉您的客户(通常是对customerdomain.com的控制权)创建一条CNAME记录,说明customerdomain.com是customerdomain.domain.com的别名.然后,您需要设置自己的服务器来解释对customerdomain.com的请求,就像处理对customerdomain.domain.com的请求一样.

根据您为子域提供服务的方式,可以通过几种不同的方式完成此操作.

如果每个客户都有一个vhost文件,则需要为客户端提供的自定义域添加"ServerAlias"指令.

如果您通过自己的应用程序服务器对入口点进行编码(例如,从PHP读取"Host"HTTP标头,然后从中设置客户名称),则需要相应地调整该代码以根据您的要求解释对外部域的请求自己的自定义域数据库.您甚至可以使用直接DNS!

有点像:

if http "host" header does not end in domain.com:
    cname = get_cname_record(http "host" header value)
    if cname does not end in domain.com:
        return error 404
    else:
        site = first part of cname
else:
    site = first part of http "host" header
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用DNS作为"自定义域数据库".确保您使用的是DNS缓存,因为这些查询将在每个请求上执行.