CNAME配置问题:子域名跳转至错误主机页面请求排查
问题排查与解决思路
嘿,这个问题我之前帮不少开发者排查过,核心问题出在你对CNAME记录的理解上——它可没法直接指向域名下的路径哦!
你的操作误区
CNAME记录的作用是将一个域名完整映射到另一个域名,比如link.myotherdomain.com CNAME mywebsite.com是合法的,但link.myotherdomain.com CNAME mywebsite.com/test完全不符合DNS规则。DNS系统只会解析域名层级,根本识别不了URL里的路径部分(/test)。
当你配置了错误的CNAME后,DNS服务器其实会忽略掉/test部分,只把link.myotherdomain.com指向mywebsite.com对应的IP(1.2.3.4)。接下来你的web服务器收到请求时,会检查请求的Host头是link.myotherdomain.com,而你的服务器配置里可能没有针对这个Host头的站点规则,于是就默认跳转到了已配置的host.mywebsite.com站点——这就是你看到错误页面的原因。
正确的解决方法
根据你的需求,有两种靠谱的方案:
方案1:用域名重定向(适合需要用户看到路径跳转的场景)
- 第一步:把
link.myotherdomain.com的DNS记录改成A记录,指向IP1.2.3.4(和mywebsite.com的IP一致) - 第二步:在你的web服务器(比如Nginx、Apache)中,为
link.myotherdomain.com配置一个虚拟主机,设置HTTP 301/302重定向到https://mywebsite.com/test。以Nginx为例,配置大概是这样:
server { listen 80; server_name link.myotherdomain.com; return 301 https://mywebsite.com/test$request_uri; }
方案2:用反向代理映射路径(适合用户看不到路径跳转的场景)
- 第一步:同样把
link.myotherdomain.com的DNS改成A记录指向1.2.3.4;或者保持CNAME指向mywebsite.com(两种DNS配置都可以) - 第二步:在web服务器中,为
link.myotherdomain.com配置虚拟主机,将所有请求反向代理到mywebsite.com/test的内容。还是以Nginx为例:
server { listen 80; server_name link.myotherdomain.com; location / { proxy_pass https://mywebsite.com/test/; proxy_set_header Host mywebsite.com; proxy_set_header X-Real-IP $remote_addr; } }
额外提醒
如果你的服务器是用cPanel、Plesk这类面板管理的,不用手动写配置文件,直接在面板里添加link.myotherdomain.com的站点,然后设置重定向或者反向代理即可,操作会更简单。
内容的提问来源于stack exchange,提问作者Felipe Michelin
相关产品推荐
相关产品推荐

