汤博乐如何处理自定义域映射



我到处搜索,但找不到明确的答案,甚至找不到一篇工程博客文章来描述公司如何将自定义域映射到其应用程序。

例如,假设我有一个网址为www.ashley.Tumblr.com的汤博乐页面。该网站允许您添加自定义域,这样访问www.ashley.com将使www.ashley.Tumblr.com完全支持其他页面和目录。

开发这个的技术名称是什么?

他们正在做的事情没有一个单独的名称,那就是设计他们的HTTP/web服务器代码来处理来自任意HTTP请求Host:标头的请求,并将它们映射到他们现有的汤博乐帐户。它与DNS无关,只是要求自定义域名的所有者更改其AAAAACNAME记录,以指向与非自定义域相同的主机(为了保证这一点,通常会将自定义域名设置为非自定义域的CNAME,以防非自定义域IP地址发生更改(。

展会时间-大多数传统的web服务器(Apache、IIS(都是围绕"网站"的概念构建的:一个物理目录,映射到与HTTPHost:标头值(或某些通配符匹配模式(以及协议和端口绑定的预定义列表相对应的请求。例如,您可以添加一个名为"MyWebsite.com"(网站名称(的条目,该条目接受对mywebsite.comwww.mywebsite.com的请求(因为这是两个不同的Host:头值(,也可以添加更多的请求,比如在端口443上使用HTTPS的secure.mywebsite.com

更现代的轻量级web服务器和反向代理(如nginx和Node.js的Express(省去了物理目录映射,让应用程序代码完全决定如何在应用程序的逻辑中路由请求(这就是web应用程序术语中的"路由器"和/或"解复用器"(demux(所做的(-这是以需要自己处理所有逻辑为代价的(公平地说,这些web服务器配备了必要的工具,可以像旧的传统web服务器一样轻松地配置它们,这不是默认的(。

但好处是,你可以让它完全按照你想要的方式工作。

在伪代码中,他们的程序可能看起来像这样:

void handleRequest(Request request) {
String hostHeader = request.getHeader("Host")
RegexMatch nonCustomDomainMatch = hostHeader.match( "([^.]+).tumblr.com" )
if nonCustomDomainMatch.success {
String accountName = nonCustomDomainMatch.groups[0]
showAccount( accountName )
}
else {
// Look up the custom domain name in a database or other mutable data store:
String accountName = db.execQuery( "SELECT accountName FROM accounts WHERE accounts.customDomainName = @cdn", new { cdn: hostHeader } )
if accountName == null {
showHttp404Error()
}
else {
showAccount( accountName )
}
}
}

现实中,考虑到它们的大小和规模,它可能是硬件负载均衡器或其他轻量级前端服务中的一些自定义逻辑,并且总是具有攻击性缓存(数据库查找很昂贵!(。

最新更新