测试服务器服务特定域的能力


11

假设您已经Server A设置了自己喜欢的webserver-daemon服务www.example.com。现在,您要将其移至Server B。经过大量复制和配置后,新服务器似乎已准备就绪。最终测试将按顺序进行:在更改DNS记录之前,www.example.com当DNS记录仍指向服务器A时,如何从服务器B请求?


虽然我的主要问题已得到回答,但是如果/ etc / hosts不受我的影响,是否可以通过telnet来测试它而不是将原始HTTP1.1与Web服务器通信?


8
请不要编辑您的问题来提出一个全新的问题。它倾向于(某种程度上)使现有答案无效,并且该平台也不会发送有关问题已更改的通知,这使得已经与您的问题相关的人们不太可能重新访问他们的答案。您可以为他们留下直接问题,即您有后续问题。通常,更好的策略是提出一个新问题(可能指向您先前的问答)。
HBruijn 2015年

2
高度考虑只为完成编辑过程中的完整目标移动而投下反对票。> _ <
Wesley

Answers:


12

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

魔法!


3
某种程度上/etc/hosts我没想到,这很正常。为提醒加油!
Jarmund 2015年

2
hosts文件不参与DNS解析,而是一种完全独立的名称查找机制,客户端OS提供的解析器库可以(并且在大多数情况下)在DNS中使用查找机制。我个人认为,“魔术”只是“不需要理解”,对于专业人士而言,这当然是一件坏事。
哈坎·林奎斯特

@HåkanLindqvist您非常误解了该短语的上下文和用法。
韦斯利2015年

无论如何,主机文件DNS。这是SF;我希望这里的人们(如果有的话)知道其中的区别。
Ilmari Karonen

@IlmariKaronen我并不是说主机文件是DNS,所以您对ServerFault的期望已经得到满足,我们在这里一切都很好!ᕕ(ᐛ)ᕗ–
韦斯利

11

重要的是要注意,对HTTP进行这样的测试重要的不是与DNS真正相关,而是HTTP客户端作为Host标头值发送的内容。

显然,客户端需要连接到正确的IP地址和端口,但除此之外,所有这些都归结到HostHTTP请求本身内联的标头中。


为了进行快速测试,可以在不更改客户端上任何操作系统级别配置的情况下使用以下命令:

$ curl -H "Host: www.example.com" http://192.0.2.17/foo/bar

或者,就此而言,

$ curl -H "Host: www.example.com" http://beta.example.com/foo/bar


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

如前所述,进行这种配置更改的最简单方法是在hosts文件中添加一个条目。这样,客户端OS解析程序库在查询hosts文件时就已经受到关注,甚至不需要进行DNS查找。

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


1
+1解决方案不涉及名称解析问题
Jarmund 2015年

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

4

您可以使用进行测试telnet。您需要通过键入命令来发出原始HTTP请求。您不会犯任何错误,并且某些服务器存在超时,因此您还必须在该时间段内键入整个请求。

该命令将是这样的:

telnet serverb 80

该请求将如下所示:

GET / HTTP/1.1
Host: www.example.com

请注意,它必须以空行结尾,因此在主机标题后按两次Enter。


1
Nitpick:虽然HTTP标头不区分大小写,但标准Host标头并非全大写。(显然,某些服务器可能在使用不同大小写字母时遇到了麻烦。)
Bob

@Bob真实,编辑过
briantist 2015年

3

我通常要做的是将www.example.com强制设置为/ etc / hosts中的服务器B IP地址。自从我使用Mosaic以来,我一直在这样做,而且由于我很少这样做,所以我没有感到需要找到更好的东西。

环顾四周,我发现/superuser/403042/custom-host-file-for-firefox,并由https://addons.mozilla.org/es/firefox/addon/回答foxyproxy-standard /,但最近有条说明说它已被废弃。


响应您的编辑,要求一种不带/ etc / hosts的测试方法,是的,存在。它可能是用于基本测试的telnet,或者是我在上面的回答中提到的插件,或者是自定义配置的代理,或者(例如,这是我偏爱的方法)服务器B上的ServerAlias,例如www2.example。 com。
Law29

3

如果您需要检查它是否有效,我建议使用一个简单的浏览器插件(例如Modify HeadersFirefox),然后将更HOST改为www.mydomain.com

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.