一次说清hosts、DNS、nginx、ip和域名的关系

对于经常使用电脑,或者开发人员来说,文标题中的几个内容都是经常被提及的 。特别对于一些经常需要访问谷歌等被屏蔽的实际上还是很不错的网站的网友来说,也有必要了解一下这方面的知识 。

一次说清hosts、DNS、nginx、ip和域名的关系

文章插图
 
先从最熟悉,也是最表层的域名和ip说起 。对于域名和ip,打个比方,在我们上学时,教室里坐满了学生,每个学生有他的名字和座位号(假设座位固定好了) 。名字就像是这里的域名,ip就是座位号,你想要去某个同学那里,实际就是往那个座位位置去 。但是,有个问题,比如我认识这个班一个叫张三的同学,但是我要去到他跟前,可我并不知道他的座位号是多少啊?这时候,就有后面要介绍的DNS出厂了 。
DNS在百科的解释是这样的“域名系统是互联网的一项服务 。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网” 。回到上面座位号的例子,我去找张三的时候,得找个人问他的座位号才行,比如说找他的班主任,班主任肯定有张三的座位号 。这里的班主任,就是DNS 。
前面说到的好端端的谷歌,怎么不能访问,初步的处理,就是有人动了DNS的解析,给了你一个错误的IP地址 。用座位号的例子来说,这个班主任故意骗了你,给了你一个根本没有或者你没法去的座位号 。
我们知道了访问域名,dns帮忙解析到ip,然后访问这个地址的资源呈现给你,那还有hosts和Nginx和他们又有什么关系 。
先说hosts,hosts文件在各pc系统里都是有的,比如windows默认在C:WindowsSystem32driversetc目录,他里面的有效内容,就是一个个的ip和域名映射关系 。用上例来说,就好比张三班上的班长,我去找他时,先找他们班长,班长要是知道张三的座位号,我就不用去找他们班主任了 。实际上HOSTS和DNS也是这种关系,默认下域名解析会先从HOSTS文件开始,若找到了映射,就直接去这个地址了 。你可以做一下很简单的尝试,来验证它 。
把一个非https的站点域名映射为别的ip地址,最简单的地址就是你的本地127.0.0.1 。如果你本地没启对应的可访问服务,你在访问这个站点,就会变成什么也访问不到了,因为实际在访问你配置的这个地址127.0.0.1 。
再来说nginx 。上面说到修改hosts来访问你想要的域名映射到的ip 。这里先启用ng配置一个监听本地127.0.0.1默认80端口的服务,把这个资源定位到你本地的一个浏览器可展示文件,比如这里的D盘/home目录下的index.html文件 。
location / { root D:/home; index index.html; }再访问这个域名时,你的浏览器展示的,就是这个页面内容了 。
一次说清hosts、DNS、nginx、ip和域名的关系

文章插图
 
这在一些前后端分离的应用中,运用得非常广泛 。比如在服务器上监听自己的ip和某个对外端口,将它指定到某个前端文件,就可以给访问者展示你的内容了 。
这些内容,也经常被一些黑客利用,使你在访问某个域名时,实际到达的确实一个伪造的网站,这个网站往往会把外表做得很真站点的一模一样,但它背后的数据,却都是假的,这时你若输入用户名密码登录,或是其他数据输入,就会很危险 。

【一次说清hosts、DNS、nginx、ip和域名的关系】


    推荐阅读