如果我对问题的描述不清楚,我深表歉意。我正在为一个允许使用外部域的在线 CMS 工作,类似于 Tumblr 或 Flavors.me。我注意到这两项服务都只需要您在域的 DNS 中添加一条 A 记录。
在尝试此操作时,我添加了一个空白名称和“www”的 A 记录,这两个记录都指向我的 Web 服务器的 IP。虽然这成功路由到我的服务器,但它没有保留使用的域。这让我不知道他们试图在应用层访问哪个帐户。我使用 nginx 作为我的 Web 服务器。
我之前曾更改过域名的所有名称服务器,并且运行正常,但这会导致邮件等其他问题变得复杂,并且在扩展解决方案中是不可行的。
我应该在这里做什么? A 记录是实现此目的的正确方法吗? Tumblr 和 Flavors.me 等网站如何确定域引用了哪个帐户?
答案1
您很可能只希望人们为其域上的子域创建指向您的服务器 IP 地址(A 记录)或主机名(CNAME)的 A 或 CNAME 记录。没有必要使用子域,但您需要提供该选项。
然后,您的服务器将根据收到的请求提供内容,就像您可以从同一台服务器为多个站点提供服务一样。在 Apache 中,您可能会使用单独的虚拟主机,或者更可能的情况是,您的 CMS 根据请求的属性提供不同的内容。您只需弄清楚您的 CMS 所在的平台如何访问请求的不同部分,然后将其传递给提取内容的逻辑。
如果您的问题更加具体,包括 CMS 所采用的语言/框架/平台,您可能会得到更具体的建议。或者尝试发帖至专业网站管理员或者堆栈溢出您可能会找到拥有更多具体经验的人。
答案2
简短回答:HTTP 1.1 请求必须提供 Host: 标头字段(请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23)。
我希望像 tumblr 这样的网站能够读到这篇文章。
答案3
除了 dunxd 所说的内容外,您还应执行 A 记录,因为该记录会指示服务提供商服务器处理对该(子)域的请求,而无需服务提供商完全控制客户的 DNS。请求进入服务提供商后,他们可以通过多种不同的方式确定要显示哪些客户的数据。
第一个是虚拟主机它允许您为您服务的每个域设置不同的配置。
第二个是重写规则它让您根据请求的 URL 确定要返回哪些数据。
第三是使用服务器变量然后使用编写应用程序的语言根据 http_host 值处理请求。
这些并不是互相排斥的,您可以使用它们的某种组合来做您想做的事情。
我不确定你的意思是什么:
它不保留使用的域名
当您访问域名时,地址栏中的 URL 是否真的发生了变化?如果是,您可能正在某处进行 http 301 重定向。您仍然可以这样做,但您需要先让服务器重写 URL,以便您仍然可以传递帐户信息。
编辑:我没有使用 nginx,但我添加了一些可能有用的链接。