所有栏目 | 云社区 美国云服务器[国内云主机商]
你的位置:首页 > 云社区 » 正文

如何把域名解析到指定IP?

发布时间:2020-04-15 16:16:34

资讯分类:域名解析  ip  指定  虚拟主机  服务器  请求
如何把域名解析到指定IP?

做域名解析的是可不是虚拟主机,而是dns服务器。比如你有三个域名:http://a.b.comhttp://c.d.comhttp://e.f.com,它们对应三台虚拟主机,但是却共用同一个ip:1.2.3.4。

这时候在dns服务器上配置这三个域名与ip的映射关系如下:

a.b.com A 1.2.3.4

c.d.com A 1.2.3.4

e.f.com A 1.2.3.4

可以发现这三个个域名都映射到同一个ip,也就是实现了你说的不同域名解析到同一个ip。

仔细观察这映射关系里面都有一个A,这个A是dns里面的术语A记录,域名到ip的映射,dns称之为A记录。


说完dns部分,再说http部分。

在浏览器里面输入http://a.b.com或者http://c.d.com或者http://e.f.com后,首先会找dns服务器做解析得到服务器ip地址1.2.3.4。

可能你会问浏览器咋知道dns服务器是谁?在你网卡上有配置(dhcp拿到或者静态配置的)。

上门说到浏览器根据域名拿到了服务器ip,然后发起http请求。该http请求包里面有两个地方注意下。

一个是1.2.3.4作为http请求数据包目的ip地址,这样数据包就可以据此找到服务器了,说是找到,其实专业说法叫路由寻址。

还有一个是域名(三个中的一个,看你输入哪个就是哪个),会放到http请求数据包中http header的host字段。

有了目的ip地址,网络就可以把你浏览器的http请求包,正确转发到服务器。

有了http host字段,当http请求包到了服务器后,服务器根据此host值,匹配你在nginx或apache上配置的多个虚拟主机(server name)。

找到后就继续虚拟主机配置的其他操作,并响应请求。如果找不到,也就是http host不匹配虚拟主机的server name,就走默认的虚拟主机。


如果你的虚拟主机,启用了ssl,会是怎样?

在dns完全相同,不过这时候查找虚拟主机时,不是根据http host匹配server name。

因为http被ssl加密了,服务器看不到http host内容,这时候难道说虚拟主机就没用了吗?肯定不是,怎么做?

当你在浏览器输入https://a.b.comhttps://c.d.comhttps://e.f.com后,记住啊这时候不是http而是https。

浏览器会在发https请求前,先ssl握手(tcp部分省略,因为http、https都有tcp三次握手,在这里没啥区别)。

ssl握手的第一个包client hello,有个字段叫sni就携带以上三个域名的一个,当ssl client hello到了服务器后,服务器根据此字段的域名去匹配虚拟主机的server name。

匹配机制同http,匹配上后,回复ssl server hello,并且也把该虚拟主机上配置的server certificate恢复给浏览器。

浏览器拿到server hello、server certificate后,继续ssl握手直至完成。

在发https请求,其实还是http,只是加了密的http,给到服务器上指定的虚拟主机,然后由此虚拟主机回复。

可以发现,此时的https也带了http host,但是此时的虚拟主机,已经定下来了。在查找虚拟主机时,https包都没有,http host没啥作用,它的工作由ssl client hello的sni完成了。

留言与评论(共有 0 条评论)
   
验证码:
Top