浏览器访问网站,要首先要把访问的网站域名解析成其指定的 IP 地址,浏览器才能对此网站进行定位并且访问其数据。
操作系统规定,这种网络请求,会先检查系统自己的 hosts 文件中,是否有这个域名和 IP 的映射关系。
如果有,则直接访问这个IP地址指定的网络位置,如果没有,再向已知的 DNS 服务器提出域名解析请求。
hosts 文件可以用文本编辑工具打开并修改,内容就是一个个 IP 和域名的对应关系。
我们可以修改这个文件中的映射关系,来免除一些域名请求的 DNS 步骤,加快访问,或者自定义一些映射关系,配合一些软件开发。
有时候,比如我们在 hosts 文件中指定了某个我们随便编的域名,访问某个网站 ip,可能会发现无法正常打开。
这可能是因为,对方的网站想到正常打开,是需要域名必须是他们指定的域名才行,这个对方是可以在 nginx 中配置的。
实际你是已经访问到这个 ip 的了,但对方经过判断,知道你这个域名不是自己的,就不给你正常提供服务了。
文件位置:
/etc/hosts
/etc/hosts
C:\Windows\System32\drivers\etc\hosts
/system/etc/hosts
/etc/hosts
以下是 Mac 系统的 hosts 文件内容,其他系统的关键内容类似。
默认内容:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
修改 host,对 DNS 解析比较慢、或者自动解析到的服务器距离自己太远(比如自己住北京,某个网站在北京明明有服务器,可 DNS 硬是给解析到一个美国的服务器,导致打开网站很慢)。
比如广为诟病的 github.com,国内常常打开很慢,或者压根就打不开,那么很可能就是 DNS 解析失败、解析的慢、解析到的 IP 地址舍近求远了。
这时修改 host 就比较有必要了,使用此网站查询某个域名对应的 IP、和此 IP 的访问速度。
以下是使用系统自带的 nslookup 工具,分别查询 github.com
和 github.global.ssl.fastly.Net
两个域名的服务 ip:
# 查询 github.com 提供服务的 ip
@bogon ~ % nslookup github.com
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
Name: github.com
Address: 13.250.177.223
# 查询 github.global.ssl.fastly.Net 提供服务的 ip
@bogon ~ % nslookup github.global.ssl.fastly.Net
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
Name: github.global.ssl.fastly.Net
Address: 115.126.100.160
查询到 ip,再直接修改系统的 host 文件,添加下面两行即可:
13.250.177.223 github.com
115.126.100.160 github.global.ssl.fastly.Net
查询工具网站:http://tool.chinaz.com/dns。
1. 输入 github.com
,点击「检测」查询
可见,这里会展示几个比较良好的 ip,但注意,这些并不一定适合自己,因为这些 ip,应该是相对于人家这个网站服务器来说的,而不是相对于「你」现在这台电脑使用的网络。
比如我 ping 203.208.39.99 这个 ip,可以 ping 通,延迟还挺低,但设置为 host 后,
github.com
却完全打不开了(见下面 设置了「不合适」的 host 时 的图)。
所以我们需要依次使用这几个 ip 来设置 host,实验检验真理,而我当前的设置使用的可用的是 13.229.188.59
这个ip。
设置了「不合适」的 host 时:
2. 点击「更多节点」查询更多节点
如果这几个 ip 都不合适(可能性比较小),那可以尝试点击「更多节点」,来跳转到另一个网站,查询更多节点。
这里跳转了新网站,虽然但不建议直接在这个网站的输入框搜索,因为我这儿搜索后,直接显示「系统正在维护中…」。
但此时,如果直接再刷新下页面,你要搜的东西就出来了。。。所以,搜索框不能用,但搜索失败后,再刷新页面就可以了。
点击后跳转网站,下拉到「ip占比」,这几个 ip 都可以尝试。
3. 最后,同理添加 github.global.ssl.fastly.net
的 host
4. 清除系统的 DNS 缓存,让 host 修改生效(非必须)
Windows环境下,可以使用以下命令:
ipconfig /flushdns
Mac OS X 环境下,通常可以使用以下命令:
sudo dscacheutil -flushcache
Linux 根据系统DNS缓存机制的不同设置,自查。
正常修改 host 会比较麻烦,需要去找到文件修改什么的。。。也不太麻烦。
这里有一个可视化软件,可以方便的管理 host,类似设置好几个 host 文件,自己选择当前使用哪一套。
软件 SwitchHosts:https://github.com/oldj/SwitchHosts/releases
默认为英文,可在设置中选择中文。