测试服务器为特定域提供服务的能力

Jar*_*und 11 domain-name-system http testing

假设你已经Server A设置了你最喜欢的 webserver-daemon 来提供www.example.com. 现在你想把它移到Server B. 经过一堆的复制和配置,新的服务器似乎已经准备好了。最后的测试是:在更改 DNS 记录之前,www.example.com当 DNS 记录仍然指向服务器 A 时,如何从服务器 B 请求?


虽然我的主要问题已得到解答,但如果 /etc/hosts 不在我的影响范围内,是否可以通过将原始 HTTP1.1 与网络服务器通信来使用 telnet 对其进行测试?

Wes*_*ley 12

DNS是一个神奇的东西。拥有超过客户端PC足够的控制,可以使right.comwrong.comviceversa.io。跳转到测试客户端 PC 并通过更改该客户端上的主机文件来解决其 DNS 解析问题,或者您可以做一些更复杂的事情并为该主机提供一个简单的 DNS 服务器来查询,例如dnsmasq. 无论您采用哪种方式进行该过程,最终目标都是针对www.example.com与服务器 B 的 IP 地址响应相关的查询进行 DNS 响应。然后 HTTP 主机标头将带有 www.example.com 的 DNS 名称,但目标是服务器 B。

魔法!

  • 不知何故,我没有想到`/etc/hosts`,这很有效。为提醒干杯! (3认同)
  • `hosts` 文件不涉及 *DNS 解析*,而是一种完全独立的名称查找机制,客户端操作系统提供的解析器库可以,并且在大多数情况下,除了 DNS 中的查找之外,还会使用该机制。就我个人而言,我认为“它的魔力”只是“没有必要理解”,这对专业人士来说当然是一件坏事。 (2认同)

Håk*_*ist 11

重要的是要注意,对 HTTP 进行这样的测试重要的事情根本与 DNS 无关,而是 HTTP 客户端作为Host标头值发送的内容。

显然,客户端需要连接到正确的 IP 地址和端口,但除此之外,这一切都归结Host为内联在 HTTP 请求本身中的标头。


为了快速测试,可以使用以下命令而无需更改客户端上的任何操作系统级别配置:

$ curl -H "Host: www.example.com" http://192.0.2.17/foo/bar
Run Code Online (Sandbox Code Playgroud)

或者,就此而言,

$ curl -H "Host: www.example.com" http://beta.example.com/foo/bar
Run Code Online (Sandbox Code Playgroud)


要对常规 Web 浏览器执行相同操作,您需要一个可以修改请求标头的浏览器扩展(或者可能是一个更改标头的 HTTP 代理),或者您需要更改客户端计算机操作系统的配置。

如前所述,进行此类配置更改的最简单方法是在hosts文件中添加一个条目。这样,客户端操作系统解析器库在查阅hosts文件时就会受到影响,甚至不需要进行 DNS 查找。

其他选项包括将客户端上配置的 DNS 解析器服务器更改为设置为根据需要进行应答的名称服务器。

  • 最近的 `curl` 允许您覆盖正常的名称解析(DNS * 或 * 主机文件)并仍然自动执行标头,如果使用/测试 httpS,还可以使用 SNI。请参阅您的联机帮助页或 http://curl.haxx.se/docs/manpage.html 中的 `--resolve`。 (2认同)