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

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

我有一个包含用户配置文件和以下地址结构的网站:

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

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

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

一个外部域名只能指向一个内部页面。用户将通过添加 CNAME/A 记录手动设置其 DNS。用户只有一个域名,没有服务器,因此他们无法通过 .htaccess 进行重定向。

所以我需要向用户提供 CNAME 记录/A 记录,以便他们更新 DNS 并将他们的域名重定向给我。

问题是:

  1. 如果我的网站在 Amazon S3 上运行,我可以实现吗?
  2. 如果是,那么如何链接以及对可以链接的域名数量有何限制?
  3. 这可以通过 S3 本身解决吗?还是我需要使用 Route 53?
  4. Linux/Apache 服务器是否是实现此目的的更好平台?如果是,如何设置?

提前感谢您分享您的专家意见。

答案1

所以我需要向用户提供 CNAME 记录/A 记录,以便他们更新 DNS 并将他们的域名重定向给我。

注意:您似乎将 DNS 中的概念与 HTTP(网页浏览)协议概念混为一谈。它们是不同的,必须分开处理。

  • DNS用于提供域名和 IP 号码(以及其他资源记录,但与本文无关)之间的映射。换句话说,它标识负责www.user1owndomain.comwww.user2owndomain.comwww.mywebsite.com,仅此而已。

    DNS 不了解可能连接到该服务器的协议,因此 HTTP 数据(如路径名 (/user1))在 DNS 意义上是无意义的。它们甚至不会在地址解析阶段传达给 DNS 服务器。请记住,www.域名.com并不意味着这只能用于网络流量;这只是惯例www.域名.com通常在另一端有一台机器运行,监听端口 80 并为网站提供服务,但它也可以为 SSH 流量、邮件服务器等提供服务。

  • HTTP,即浏览器与域名解析服务器之间使用的协议。如果www.mywebsite.com根据 DNS 的 IP 为 1.2.3.4,浏览器通过端口 80 连接到该服务器进行网页浏览。

如果您需要执行 Web 流量的重定向,则这是在 HTTP 级别完成的,而 DNS 对实际完成的重定向的影响很小(即使您使用 DNS 别名或 CNAME 记录;请参见下文)。

如果我的网站在 Amazon S3 上运行,我能实现这一点吗?(原文如此)

是的。有两种可能的路线:

  1. 使用运行 Web 服务器(Apache、nginx 或类似服务器)的 EC2 实例。为www.userXowndomain.com解析该服务器的 IP 地址。配置Apache 虚拟主机对于指向 Web 服务器的每个用户域。配置每个虚拟主机以重定向到所需的 URL(www.mywebsite.com/user1), 按照这个科幻问题

    净效果:DNS 解析为 IP,浏览器连接到 IP,Apache 识别域并映射到虚拟主机,虚拟主机配置将 HTTP 重定向发送到正确的 URL。

  2. 如果你不想单独运行一个完整的 EC2 实例来处理网络流量,你可以使用 S3 buckets 来实现这个目的,并结合路由 53 将流量引导到每个www.userXowndomain.com到存储桶。存储桶随后配置为重定向到适当的 URL。

    注意:如果您有一个用于托管的 EC2 实例www.mywebsite.com,没有理由不能将其用于执行重定向。它只是额外的 Apache 虚拟主机配置,因此不需要单独的实例。

如果是,那么如何链接以及对可以链接的域名数量有何限制?

没有硬性限制。Apache 配置可能会对虚拟主机数量(主要是日志记录和打开文件描述符的数量)造成人为限制,但这些限制可以通过以下方法克服:精心配置

如果重定向极其繁忙,以至于服务器超载。您可以通过常规性能监控来检测这种情况,并引入更多服务器进行负载平衡(或将繁忙的工作转移到专用机器上)。除非您运行非常高流量站点,这不太可能成为问题。

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

如上所述,请注意不要将 DNS 与 HTTP 混淆。如果用户的域有自己的 DNS 服务(例如由注册商提供的服务),则可以利用它来配置指向运行 Web 服务器重定向的 EC2 实例的 DNS 记录。您也可以将域的名称服务器委托给路由 53。最终答案可能取决于您与客户的关系:前一种解决方案允许客户管理自己的 DNS(例如用于其他服务,如邮件)。后者将整个 userXowndomain.com 命名空间的控制权移交给您,这意味着您必须配置与该域相关的 DNS 的所有方面。这可能包括但不限于用于邮件传递的 MX 记录、客户所需的任何其他子域、别名、SPF 记录等。

Linux/Apache 服务器是否是实现此目的的更好平台?如果是,如何设置?

在 Linux 上运行 Apache 是实现此目的的一种方法,并且这样做可能具有成本效益。还有许多其他 Web 服务平台同样能够发出 HTTP 重定向。配置是根据每个 Web 服务器的相应页面进行的,为每个域配置虚拟主机并为该域配置 HTTP 重定向。


什么类型的重定向?

HTTP/1.1 标准RFC 2616,定义多种重定向类型。您需要指定 Web 服务器应提供的重定向类型www.userXowndomain.com-->www.mydomain.com/userX研究 RFC 将会很有启发,因为不同的重定向意味着不同的行为,并且会对 SEO 等问题产生次要影响。

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

过去也曾使用过使用“框架集”的重定向。在这种情况下,您在每个用户的域中托管一个网页,该网页使用标签带有一个指向正确 URL 的框架。通常应避免使用这种方法。


使用 DNS 别名作为“重定向”

人们常常对 DNS 和 HTTP 协议在网页浏览中的作用感到困惑,特别是因为 DNS 提供了 CNAME 或“别名”记录,它将一个域的 DNS 返回别名化为另一个域的输出。

DNS 别名意味着没有什么到 Web 浏览器;DNS 别名仅告诉 DNS 解析器,对域 X 的请求应像请求域 Y 一样进行响应,并且通过遵循该链,最终应到达浏览器连接的 IP 地址。然后浏览器连接到该地址,仍然相信它正在与最初请求的域通信(例如www.userXowndomain.com)。

您可以使用 CNAME 为每个用户域实现重定向,www.userXowndomain.com指向www.mywebsite.comDNS 中的域。但是,您仍需要使用虚拟主机或类似设备配置 Web 服务器,以匹配每个请求www.userXowndomain.com并进行重定向至www.mywebsite.com/userX。DNS 仅告诉浏览器如何到达 Web 服务器;它不会告诉浏览器重定向 URL 是什么。

但是,这种配置并非没有缺点。如果要重定向区域的根目录(即 http://userXowndomain.com),则局限性最好在区域的根目录下使用 CNAME,因为根据 RFC,区域根目录下不应共存其他数据(例如用于邮件传递的 MX 记录)。这可能不是问题,也可能是问题,具体取决于您为用户提供的服务。


使用注册机吗?

我应该指出,许多域名注册商都提供基本的 301 或 307 HTTP 重定向作为域名注册的标准,因此,您可以通过使用他们的服务而不是构建自己的服务来避免相当大的复杂性。

相关内容