为子域名设置 CNAME 问题

为子域名设置 CNAME 问题

我会为此进行设置:

  • 用户转到 test.example_site1.org
  • test.example_org1.org 是 test.example_org2.org 的 CNAME
  • 用户将看到 test.example_org2.org 的页面

在 example_org2.org 服务器上,我使用 nginx,并且有 3 个 django 项目。

test.example_org2.org 显示第三个 django 项目。http://example_org2.org显示第一个 django 项目。

问题是我在 example_org1.org 上设置了一个 CNAME,用于将 test.example_org1.org 指向 test.example_org2.org ,但如果我尝试访问http://test.example_org1.org我看到了第一的django 项目,其中一个配置到主域而不是子域。否则,如果我直接转到http://test.example_org2.org一切正常,我看到了正确的项目。

为什么是这个问题?

答案1

CNAME只能说sub1.domain 与 sub2.domain 具有相同的 IP。但它并没有告诉网络服务器它们应该提供相同的内容。

当你在浏览器中输入域名时,它会通过查询检查 IP DNS,并得到一个答案:这是 test.example_org2.org 的 CNAME,指向 IP 1.2.3.4。然后,浏览器连接到该 IP,并发送一个Host值为 的标头test.example_org1.org(因为这是您所请求的)。Ngnix获取此值,并且由于它对此一无所知(不在其配置中),因此它为其拥有的第一个虚拟主机提供服务。

您可以告诉默认虚拟主机,如果有人请求test.example_org1.org,则应该将其重定向到test.example_org2.org(未经测试):

if ($host ~* "^test.example_org1.org$"){
  rewrite ^(.*)$ http://test.example_org2.org permanent;
  break;
}

答案2

将 test.example_org2.org 与 test.example_org1.org 一起添加到 server_name 怎么样

server {
   server_name test.example_org1.org test.example_org2.org;

...
}

相关内容