假设你已经Server A
设置了你最喜欢的 webserver-daemon 来服务www.example.com
. 现在你想把它移到Server B
. 经过大量的复制和配置,新服务器似乎已经准备就绪。www.example.com
最后的测试是有序的:在更改 DNS 记录之前,当 DNS 记录仍然指向服务器 A 时,如何向服务器 B 请求?
虽然我的主要问题已经得到解答,但如果 /etc/hosts 不在我的影响范围内,是否可以通过将原始 HTTP1.1 与网络服务器交谈来使用 telnet 对其进行测试?
DNS是一个神奇的东西。通过对客户端 PC 的足够控制,您可以
right.com
制作wrong.com
和viceversa.io
. 跳转到测试客户端 PC 并通过更改该客户端上的主机文件来处理其 DNS 解析,或者您可以做一些更复杂的事情并为该主机提供一个简单的 DNS 服务器来查询,例如dnsmasq
. 无论您采用哪种方式,最终目标都是为www.example.com
与服务器 B 的 IP 地址响应有关的查询做出 DNS 响应。然后,HTTP 主机标头将带有 www.example.com 的 DNS 名称,但针对服务器 B。魔法!
重要的是要注意,对 HTTP 进行这样的测试并不真正与 DNS 相关,而是 HTTP 客户端作为
Host
标头值发送的内容。显然,客户端需要连接到正确的 IP 地址和端口,但除此之外,这一切都归结为
Host
HTTP 请求本身内联的标头。为了快速测试,可以使用以下命令,而无需更改客户端上的任何操作系统级别配置:
或者,就此而言,
要对常规 Web 浏览器执行相同操作,您需要一个可以修改请求标头的浏览器扩展(或者可能需要一个更改标头的 HTTP 代理),或者您需要更改客户端计算机操作系统的配置。
如前所述,进行此类配置更改的最简单方法是在
hosts
文件中添加一个条目。这样,客户端操作系统解析器库在查询hosts
文件时就会受到打击,甚至不需要进行 DNS 查找。其他选项包括将客户端上配置的 DNS 解析器服务器更改为设置为根据需要进行应答的名称服务器。
您可以使用
telnet
. 您需要通过键入命令来发出原始 HTTP 请求。您不能犯任何错误,并且某些服务器会超时,因此您还必须在该时间范围内键入整个请求。该命令将是这样的:
该请求将如下所示:
请注意,它必须以空行结尾,因此您需要在主机标题后按两次 Enter。
我通常做的是强制 www.example.com 到我的 /etc/hosts 中的服务器 B IP 地址。自从我使用 Mosaic 以来,我一直在这样做,而且因为我不经常这样做,所以我觉得没有必要找到更好的方法。
环顾四周,我发现https://superuser.com/questions/403042/custom-host-file-for-firefox由https://addons.mozilla.org/es/firefox/addon/回答foxyproxy-standard/但最近有一个说明说它已被放弃。
如果你需要检查它是否有效,我建议使用一个简单的浏览器插件,比如
Modify Headers
Firefox,然后HOST
将www.mydomain.com
.