如何允许用户使用自己的域名来托管服务?

时间:2020-03-06 14:50:00  来源:igfitidea点击:

我正在开发一个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提供了此类服务,以允许人们将自己的域名用于照片组合。我想要达到相同的结果。

我怎样才能做到这一点?谢谢!

解决方案

只需在Web服务器上将tomsite.com设置为mywebapp.com/user/tom/ path的新记录?

看到它就像一个别名:)

当然,由于我们基于asp.net/windows,因此我认为我们必须深入研究IIS才能使此类工作自动化。如果我们使用的是Apache,则应在httpd.conf中添加3条简单的行。

Smugmug(我们提到过)让用户设置CNAME记录,该记录将为用户的个人照片部分的网址加上别名。对于大多数用户而言,这可能需要他们联系主机或者查找帮助文件以进行全部设置。

因此,尽管www.tomsite.com可以透明地提供www.mywebapp.com上托管的页面,但用户将不得不付出某种努力。要使其完全无缝,我们将需要与用户Web主机进行某种安排(Smugmug似乎与GoDaddy达成了这样的安排)。

我怀疑我们是否可以与所有Web主机建立这样的集成,因此唯一完整的解决方案是自己托管用户的网站(我对情况还不了解,无法确定是否合理解决方案)。

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

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

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

请记住,仅将默认网站映射到我们自己的友好名称。如果将其置于混杂模式(映射为" *"),则结果将不可预测。

设置主机头映射

在"站点"节点下选择"默认网站"。在右上方的"操作"窗格中,单击"绑定..."以打开"站点绑定"对话框。将有一个绑定列表,可能包含一个单独的条目,上面写着http *80。选择它,然后单击Edit ...按钮。将主机名设置为我们自己的友好名称。

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

这需要多个步骤。

首先,我们必须了解用户将如何配置他们的域以为站点创建一个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的自定义类,该类也将域考虑在内。