将多个域指定到一个域下的特定URL:Amazon S3或Apache

我有一个用户configuration文件和以下地址结构的网站:

  • www.mywebsite.com/user1
  • www.mywebsite.com/user2

我需要允许用户将自己的域名指向/redirect到我网站上的相应页面,例如:

  • www.user1owndomain.com – > www.mywebsite.com/user1
  • www.user2owndomain.com – > www.mywebsite.com/user2

一个外部域可以只指向一个内部页面。 用户将通过添加CNAME / Alogging手动设置他们的DNS。 用户将只有一个域,没有服务器,因此他们不能通过.htaccessredirect。

所以我需要给用户提供CNAMElogging/ Alogging,以便他们更新DNS并将他们的域redirect到我。

问题是:

  1. 如果我的网站在Amazon S3上运行,我可以做到吗?
  2. 如果是的话,如何以及有多less域可以链接的限制?
  3. 这可以通过S3本身来解决,还是需要使用Route 53?
  4. 是Linux / Apache服务器更好的平台来完成这个? 如果是,如何设置?

预先感谢您分享您的专家意见。

所以我需要给用户提供CNAMElogging/ Alogging,以便他们更新DNS并将他们的域redirect到我。

小心:您似乎正在将DNS中的概念与HTTP(网页浏览)协议概念混为一谈。 这些是不同的,必须分开处理。

  • DNS用于提供域名和IP号码(和其他资源logging,但在这里不相关)之间的映射。 换句话说,它确定了一个负责www.user1owndomain.com,www.user2owndomain.com,www.mywebsite.com的服务器,这就是全部。

    DNS没有可能连接到该服务器的协议的概念,因此,诸如path名(/ user1)之类的HTTP数据在DNS意义上是无意义的。 在地址parsing阶段甚至没有将它们传递给DNS服务器。 请记住,域名www.domain.com并不意味着这只能用于networkingstream量; http://www.domain.com通常只有一台机器运行在另一端监听端口80并为一个网站服务,这同样也是服务于SSH通信,邮件服务器等的惯例。

  • HTTP ,浏览器和域所parsing的服务器之间的协议。 如果根据DNS,www.mywebsite.com在IP 1.2.3.4,则浏览器连接到端口80上的该服务器以用于网页浏览目的。

如果您需要执行networkingstream量的redirect,这是在HTTP级别完成的,并且DNS对实现的实际redirect(即使使用DNS别名或CNAMElogging;请参阅下面)的影响最小。

如果我的网站在Amazon S3上运行,我可以做到吗? (原文如此)。

是。 有两种可能的路线:

  1. 使用运行Web服务器的EC2实例(Apache,nginx或类似的)。 为www.userXowndomain.comconfigurationDNS以parsing为该服务器的IP地址。 为指向Web服务器的每个用户域configurationApache虚拟主机 。 根据这个SF问题configuration每个虚拟主机redirect到所需的URL(www.mywebsite.com/user1)。

    净效果:DNSparsing为IP,浏览器连接到IP,Apache识别域并映射到虚拟主机,虚拟主机configuration将HTTPredirect发送到正确的URL。

  2. 如果您不想仅为Webstream量运行完整的EC2实例,则可以使用S3存储桶用于此目的,并与路由53结合使用,将stream量导向每个www.userXowndomain.com到存储桶。 随后将该存储桶configuration为redirect到适当的URL。

    注意:如果您有用于托pipewww.mywebsite.com的EC2实例,则没有理由不能将其用于redirect。 这只是附加的Apache虚拟主机configuration,所以不需要单独的实例。

如果是的话,如何以及有多less域可以链接的限制?

没有硬性限制。 由于Apacheconfiguration虚拟主机的数量(主要是由于日志logging和打开的文件描述符的数量),可能会人为施加限制,但可以通过仔细configuration来克服这些限制。

如果redirect非常繁忙,软限制可能会发挥作用,从而导致服务器过载。 这可以通过日常的性能监视来检测,并引入更多的服务器来实现负载均衡(或者将忙碌的工作剥离到专用的机器上)。 除非您运营的网站stream量非常高,否则这不太可能成为问题。

这可以通过S3本身来解决,还是需要使用Route 53? (原文如此)。

如上所述,注意不要将DNS混淆为HTTP。 如果用户的域具有自己的DNS服务(如注册服务商提供的DNS服务),则可以使用该服务configuration指向运行Web服务器redirect的EC2实例的DNSlogging。 您也可以将域的名称服务器委托给路由53。 最终的答案可能取决于您与客户的关系:以前的解决scheme允许客户pipe理自己的DNS(例如,用于其他服务,例如邮件)。 后者将整个userXowndomain.com命名空间的控制权转交给您,这意味着您必须configuration与该域相关的DNS的所有方面。 这可能包括但不限于用于邮件传送的MXlogging,客户期望的任何其他子域,别名,SPFlogging等。

是Linux / Apache服务器更好的平台来完成这个? 如果是,如何设置?

运行在Linux上的Apache将是实现这一目标的一种方法,而且这样做可能是经济高效的。 还有很多其他的Web服务平台,就像能够发出HTTPredirect一样。 根据每个Web服务器的相应页面进行configuration,为每个域configuration虚拟主机并为该域configurationHTTPredirect。


什么types的redirect?

RFC 2616中的HTTP / 1.1标准定义了多种types的redirect。 您需要指定Web服务器redirect的types,以redirectwww.userXowndomain.com – > http://www.mydomain.com/userX。 研究RFC是有益的,因为不同的redirect意味着不同的行为,并可能对诸如SEO等问题产生次要影响。

最常见的redirect是由HTTP状态码301307定义的,分别对应于“永久移动到另一个URL”和“暂时移动到另一个URL”。 特别是,临时移动的URL意味着将来仍然使用原始URL(www.userXowndomain.com)访问所请求的资源,并且用户代理不应该更新其logging以永久使用www.mywebsite.com/ user1作为初始URL。

使用“框架集”的redirect也被用于过去。 在这种情况下,您在每个用户的域中托pipe单个网页,该网站使用带有单个框架的标签指向正确的url。 通常应该避免这种方法。


使用DNS别名作为“redirect”

DNS和HTTP协议在网页浏览中的作用经常被混淆,特别是因为DNS提供了CNAME或“别名”logging,这些logging将一个域的DNS返回给另一个域的输出。

一个DNS别名对Web浏览器没有任何意义 ; 一个DNS别名只是告诉DNSparsing器,应答域X的请求就好像它被请求的域Y一样,并且通过跟随链,最终应该到达浏览器所连接的IP地址。 然后浏览器连接到该地址,仍然认为它正在与最初请求的域(例如www.userXowndomain.com)通话。

您可以使用CNAME为每个用户域实现redirect,www.userXowndomain.com指向DNS中的www.mywebsite.com域。 但是,您仍然需要使用虚拟主机或类似configurationWeb服务器来匹配www.userXowndomain.com的每个请求,并将其redirect到www.mywebsite.com/userX。 DNS只是告诉浏览器如何到达Web服务器; 它不会告诉浏览器redirect的URL是什么。

然而,这种configuration并非没有问题。 如果要redirect区域的根(即http:// userXowndomain.com),则在区域的根目录处使用CNAME会有一些限制 ,因为没有其他数据应根据区域共存于区域的根目录RFC(例如邮件传送的MXlogging)。 这可能不是问题,也可能是一个难题,取决于您为用户提供的服务。


使用注册商?

我应该注意到,许多域名注册商提供基本的301或307 HTTPredirect作为域名注册的标准,因此您可以通过使用他们的服务而不是build立自己的服务来避免相当大的复杂性。