15

我想创建一个示例 SaaS 应用程序,用户可以通过该应用程序注册、创建网页、使用模板和/或使用自定义 css 对其进行自定义,从自定义域中提供他们的网页。

我正在考虑将模板与媒体/样式表/js 文件一起保存在 S3/其他 CDN 上。虽然所有这些在技术上都是可能的(实用的?这可能是有争议的)。无论如何,在这种情况下,我很难弄清楚如何通过自定义域为网站提供服务?例如,当他们注册时,他们可以获得一个subdomain.domain.com地址。但是,他们如何指出customerdomain.com,以便在customerdomain.com输入时,它提供与 相同的内容customerdomain.domain.com,并且 URL 保持不变customerdomain.com

此外,如果我想拥有一个“ feature”,那么自定义域可能是一项付费功能。我如何将其限制为仅限付费用户?

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

我见过的一种解决方案是让服务器提供一个通配符域 ie *.domain.com,并为每个自定义域提供一个单独的虚拟主机,但是如果可以的话,我宁愿避免。

谢谢。

4

1 回答 1

9

自定义域通常通过 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

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

于 2012-06-21T19:29:31.187 回答