我会为此进行设置:
- 用户转到 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;
...
}