【问题标题】:How do I allow a user to use their own domain name for a hosted service?如何允许用户将自己的域名用于托管服务?
【发布时间】:2008-09-27 22:30:31
【问题描述】:

我正在开发一个允许人们发布内容的 ASP.NET MVC Web 应用程序,但除了将内容发布到远程服务器之外,我还希望允许人们直接使用他们的域名。例如,用户“Tom”可以让他的域名 TomSite.com 指向http://www.mywebapp.com/user/tom,但子路径也会被映射。例如,TomSite.com/path 将映射到 www.mywebapp.com/user/tom/path,这对 Web 访问者是透明的。访问者永远不会在 TomSite.com 上的任何地方看到“mywebapp.com”。

我认为 Smugmug.com 提供了这样的服务,允许人们使用自己的域名作为照片组合。我想达到同样的效果。

我该怎么做?谢谢!

【问题讨论】:

  • 您运行的是什么版本的 IIS? IIS6 和 IIS7 的解决方案非常不同。

标签: asp.net asp.net-mvc domain-name


【解决方案1】:

这需要多个步骤。

首先,您必须了解您的用户将如何配置他们的域,以便为您的站点提供 CNAME 记录。您可以通过多种方式将其归档,其中最好的就是教育。与托管服务提供商建立合作伙伴关系需要大量的工作量。

在 IIS 中,这将要求您手动添加每个主机名(但这也可以通过脚本进行归档),或者为您的站点设置一个专用 IP 地址。

还需要将域与帐户关联。用户必须自己添加它,您可能会在界面中添加一个检查,以确认域指向您的服务器。这个代码看起来像(记得包括 System.Net 命名空间)。

if (Dns.GetHostEntry("www.user.example.com").HostName == "www.example.com")
{
    // www.user.example.com is a CNAME for www.example.com
}

在您的 ASP.NET MVC 项目中,您需要为此特定目的实现路由。创建一个继承自 Route 的自定义类,该类也将域考虑在内。

【讨论】:

    【解决方案2】:

    Smugmug(你提到的那个人)让他们的用户设置一个 CNAME 记录,该记录将为用户的个人照片部分的 url 设置别名。对于大多数用户来说,这可能需要他们联系他们的主机或查找帮助文件才能进行所有设置。

    因此,虽然 www.tomsite.com 可以透明地提供托管在 www.mywebapp.com 的页面,但用户必须付出一些努力。要使其完全无缝,您需要与用户虚拟主机(Smugmug 似乎与 GoDaddy 有这样的安排)。

    我怀疑您是否能够设置与所有网络主机的这种集成,因此唯一完整的解决方案是自己托管您用户的网站(我对您的更广泛情况了解不够,无法确定是否是一个合理的解决方案)。

    注意:除非您自己托管他们的网站,否则在您自己的网络服务器上设置别名(也称为 url 重写)将不起作用,因为显然从您用户的域获取的人不会首先到达您的服务器。

    【讨论】:

      【解决方案3】:

      让每个客户的友好名称指向您的网络服务器的外部 IP 地址。

      使用 IIS 将主机头请求中指定的友好名称解析为您希望传递给该友好名称的逻辑网站。 IIS 很乐意将网站和虚拟文件夹映射到文件系统中的同一文件夹。为每个客户创建一个网站。然后将该网站绑定到客户的友好名称。

      请记住仅将默认网站映射到您自己的友好名称。如果你让它处于混杂模式(映射到“*”),结果将是不可预测的。

      设置主机头映射

      选择站点节点下的默认网站。在右上角的 Actions 窗格中单击 Bindings... 以打开 Site Bindings 对话框。将会有一个绑定列表,可能包含一个显示 http * 80 的条目。选择它并单击 Edit... 按钮。将 主机名 设置为您自己的友好名称。

      运行 IIS7 管理器 并在 Sites 节点下为每个客户站点创建一个网站。在创建每个网站时设置文件路径和主机头绑定。显然,主机头绑定(主机名)应该是该客户的友好名称。

      【讨论】:

        【解决方案4】:

        只需在您的网络服务器设置 tomsite.com 中直接创建一条新记录到您的 mywebapp.com/user/tom/ 路径?

        像别名一样看待它:)

        当然,由于您是基于 asp.net/windows 的,我认为您必须深入研究 IIS 才能自动执行此类操作。如果你在 apache 上,它将在 httpd.conf 中添加 3 行简单的代码。

        【讨论】:

        • 那么“3 条简单线”的例子怎么样?
        • DocumentRoot "/www/user/tom/" in httpd.conf :)
        猜你喜欢
        • 2018-04-01
        • 1970-01-01
        • 2021-11-10
        • 2022-07-27
        • 1970-01-01
        • 2015-07-22
        • 2020-09-22
        • 2011-01-02
        相关资源
        最近更新 更多