我有一个域名 foo.this.com,我想将它映射到 bar.that.com,因此我在注册界面上创建了一个 cname。但是,当我尝试访问 foo.this.com 时,它显示指向 bar.that.com 的 IP 的 404。
所以我的问题是,我需要在我的服务器(托管 bar.that.com 网页的服务器)上进行什么配置才能识别 foo.this.com?
提前致谢。
答案1
这取决于您使用的 http 守护进程。
如果您使用 Apache HTTPD虚拟主机条目,您很可能需要向您的站点的 VirtualHost 条目添加一个 ServerAlias 指令。
<VirtualHost *:80>
ServerName bar.that.com
ServerAlias foo.this.com
DocumentRoot /home/that.com
... snip ...
</VirtualHost>
答案2
你想做的事情属于基于名称的虚拟主机
从技术上讲,Web 浏览器会解析bar.that.com
IP 地址(例如1.2.3.4
)。然后它会向 发送 HTTP 请求1.2.3.4
。主机通常不知道用于寻址的名称。
但是,HTTP 1.1 的一个特殊功能允许浏览器将主机名插入 HTTP 标头。典型的 HTTP 标头如下所示:
GET / HTTP/1.1
Host: bar.that.com
然后,Web 服务器根据Host:
标头的内容决定要传送哪些页面。当然,您必须在配置中告诉它如何决定。对于 Apache,请参阅这里,但任何现代网络服务器都会有类似的东西。
基于名称的虚拟主机被广泛使用,每次听到共享主机一词时,请考虑基于名称的虚拟主机。HTTP 1.1 已经存在很长时间,因此所有正在使用的浏览器都支持它。只有非常非常老的浏览器(如 NCSA Mosaic)不支持它。
答案3
如果您使用的是 IIS,则需要将主机标头添加到 bar.that.com 网站,以供 foo.this.com 使用
答案4
对于 nginx,如果希望一个指令处理多个域/子域,可以将它们全部放在 server_name 指令中。例如,
server {
listen 80;
server_name foo.bar.com baz.foo.com bar.foo.com *.foo.com;
[.......]
}