为什么域名能够访问网站,而直接使用IP不可以
为什么域名能够访问网站,而直接使用IP不可以
- 背景介绍
- 提出问题
- 分析原因
- 只输入ip地址访问不到域名的原因:
- 多个站点对应一个ip地址的问题
- 虚拟主机技术
- 反向代理技术
- 小结
背景介绍
在访问杭电官网杭电官网的时候,直接在浏览器上,输入域名是可以得到访问结果的。因此,产生了一种猜测,既然网络中实际上是根据域名转换的IP来直接访问服务器的,那么我直接通过IP来访问杭电官网是否可以??
通过nslookup 解析出杭电官网的ip地址,然后在浏览器中手动输入相关ip地址,结果并不能得到访问结果,为什么?
解析到的ip地址有两个
218.75.123.182
218.75.123.181
初步怀疑可能是用这两个IP地址做了高可用
当其中某一个Ip地址访问不到的时候,另外一个ip地址可以访问到。
继而,我决定换个网站来试一下,看能否直接访问杭电OJ,高潮来了,惊讶的发现杭电OJ和杭电官网,这两个网站对应的IP地址是同一个。
提出问题
由于上面的情况,我内心中充满了疑问,主要有两点。
- 1.为什么我直接访问
www.hdu.edu.cn
是能够访问到网站的,而当我输入218.75.123.182却访问不到? - 2.为什么
www.hdu.edu.cn
和acm.hdu.edu.cn
这两个网站使用dns解析出来的ip地址是一样的?
分析原因
查阅众多资料后,基本能够分析出以上两个问题的原因所在。
只输入ip地址访问不到域名的原因:
使用nslookup对多个杭电下的网站进行解析,发现很多站点的ip地址是相同的,都是218.75.123.182,218.75.123.181这两个。如下图所示,杭电网站cloud.hdu.edu.cn和www.hdu.edu.cn以及杭电oj系统.www.hdu.edu.cn对应的是同一个公网ip地址(不知道公网ip和私网ip的,可以查一下百度)
这么多站点对应同一个ip地址,你只输入ip地址,浏览器当然不知道你到底要访问哪一个站点,这就是为什么你不能够使用ip地址去访问的原因所在。
多个站点对应一个ip地址的问题
理论上来说,一个ip对应一个站点,这是很正常的,那为什么会出现上文中所描述的那样,一个ip地址对应多个站点的情况呢?
有两种技术可以实现描述的问题
- 1.虚拟主机技术
- 2.反向代理技术
虚拟主机技术
虚拟主机技术是apache,nginx等服务器所特有的一种功能,也就是实现多个站点在同一台服务器上放置。假如说杭电是使用虚拟主机技术实现的一个IP对应多个web站点的话,那么实际情况应该是这个样子:
比如我现在有一台服务器,我可以在服务器里面描述这样一种站点和实际路径的关系:
站点 | 实际存放路径 |
---|---|
acm.hdu.edu.cn | /var/www/acm |
www.hdu.edu.cn | /var/www/html |
cloud.hdu.edu.cn | /var/www/cloud |
那么这样这三个站点就能够在同一台服务器上共存了,当你访问acm.hdu.edu.cn的时候,主要有这么几个步骤
- 1.dns做域名解析,然后得到解析后的结果,假如说是218.75.123.182。
- 2.浏览器开始与目标ip地址为218.75.123.182的服务器进行三次握手操作,建立TCP连接
- 3.浏览器开始构建HTTP请求报文,报文的头部格式为
Accept
*/*
Accept-Encoding
gzip, deflate
Accept-Language
zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Connection
keep-alive
Cookie
PHPSESSID=v103qj5emvgv5j8hd85d2aro33
Host
acm.hdu.edu.cn
Referer
http://acm.hdu.edu.cn/
User-Agent
Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/62.0
只需要关注这个报文头部的这么一段
Host
acm.hdu.edu.cn
通过这个报文可以知道,浏览器要访问ip地址为218.75.123.182的服务器的哪一台HOST(这里有一个概念,服务器上面可以有一个站点,也可以由多个站点,有一个站点的话,服务器上就只有一个HOST,如果有多个站点的话,服务器上面就会有多个虚拟HOST)
- 4.服务器接受到这个报文之后,会进行分析,apache服务器会根据报文中的host,来匹配自己的配置文件。假设,服务器中的配置文件是这样写的:
<VirtualHost *:80>DocumentRoot /var/www/acmServerName acm.hdu.edu.cn
</VirtualHost>
<VirtualHost *:80>DocumentRoot /var/www/htmlServerName www.hdu.edu.cn
</VirtualHost>
<VirtualHost *:80>DocumentRoot /var/www/cloudServerName cloud.hdu.edu.cn
</VirtualHost>
那么当请求报文中的HOST是acm.hdu.edu.cn的时候,apache服务器就会根据自己的配置文件所写的那样,去/var/www/acm目录下寻找站点内容。
- 5.服务器处理请求,构建响应报文,发送响应报文到客户端
反向代理技术
当我以为我已经接近了事实真相的时候,意外的发现了另外一个问题,我登录到校园网,然后继续使用nslookup进行域名解析,发现了一个惊讶的事情,解析之后,上文中所提到的那三个站点的ip完全不一样。也就是说实际上这三个站点完全放在了不同的服务器上,即不可能是使用的虚拟主机技术(如果使用虚拟主机技术,这几个站点肯定是在同一台服务器上的)。
如下图所示
内网、外网解析文中所述三个站点的情况如下表所示
网站域名 | 外网解析 | 内网解析 |
---|---|---|
acm.hdu.edu.cn | 218.75.123.182,218.75.123.181 | 192.168.102.19 |
www.hdu.edu.cn | 218.75.123.182,218.75.123.181 | 192.168.102.6 |
cloud.hdu.edu.cn | 218.75.123.182,218.75.123.181 | 10.1.18.137 |
既有192.168开头的私网ip地址,又有10.1开头的私网ip地址,这种特殊的网络结构是由于杭电的网络规划造成的,一开始杭电使用的是192.168开头的私网ip地址,后来发现不够了,继而进行扩展,使用10.1开头的私网ip地址。这里对于这一部分内容不做深究
由此,我们基本可以推断出,杭电实际的网络结构是下图所示的样子。而不是上文中,我所推测的虚拟主机。
当我在外网访问acm.hdu.edu.cn的时候,主要经历了这么几个步骤。
通过dns解析获得acm.hdu.edu.cn的反向代理ip地址 218.75.123.181。
1.客户端发送报文到ip地址为218.75.123.181的服务器上,中间要经过NAT路由器,做NAT转化,把私网IP地址转化为公网IP地址。
2.数据包在因特网中进行路由准发
3.数据包最终到达218.75.123.181的apache服务器,这个服务器实际上并不承担web站点任务,主要是作为一个WEB网站的网关角色(反向代理角色)。
4.请求报文中的HOST是acm.hdu.edu.cn
,因此,反向代理服务器会将请求报文转发至域名为acm.hdu.edu.cn的主机上。acm主机处理完请求之后,会将处理后的结果返回至客户端。
小结
本文主要讲了两方面:
- 1.直接使用ip地址访问不了站点的原因
原因就在于该ip地址可能对应着多个web站点,单单依靠ip地址是不知道如何匹配到哪个web站点的。但是通过域名,我们就能够知道具体要访问哪一个HOST。如果使用虚拟主机,直接找到相关virtual HOST即可,如果使用反向代理,那么通过代理找到HOST的实际私网地址也可以。
- 2.只有一个公网ip如何实现多个WEB站点的访问
有两种办法可以实现,其一是虚拟主机,其二就是反向代理。通过目前来看,虚拟主机的实现方式已然不多,更多的企业或者学校使用的是反向代理技术
针对本案例(杭电若干网站),这若干网站经过DNS解析后对应的是同一个ip218.75.123.182或者218.75.123.181
,用户请求接入到这个公网ip的时候,该服务器会进行反向代理,根据请求报文中的HOST名字,将请求报文转发至具体的局域网内部的主机进行处理,然后再将处理结果进行返回。
为什么域名能够访问网站,而直接使用IP不可以相关推荐
- Nginx只允许域名访问网站,禁止使用IP 访问80,443端口
转载来源 :Nginx只允许域名访问网站,禁止使用IP 访问80,443端口 :http://www.safebase.cn/article-260225-1.html 摘要: 一.背景 为了避免别人 ...
- 将域名直接映射到网站首页(通过域名即可访问网站首页)
前段时间做了自己的个人网站,注册了域名,并且域名已经解析到了我租的服务器的公网ip, web容器用的是Tomcat,并且Tomcat的默认端口号也改为了80, 通过域名已经可以直接访问到Tomcat的 ...
- 阿里云域名解析完成后仍然无法通过域名正常访问网站
通过阿里云进行域名解析后,仍然无法正常访问网站的解释,与解决办法 1.域名解析完成后,未在主机管理页面进行域名绑定. 域名绑定流程: 进入阿里云虚拟主机页面,找到相应的虚拟主机,点击后面的管理. 点击 ...
- 关于只能IP访问,域名不能访问网站的解决
我买的是腾讯云的服务器Cenos 6.5系统,自己配置的DNS域名服务器,nslookup www.xuefeng66.cn能够正常解析为115.159.201.119(若是非权威解析为该结果证明解 ...
- Linux上基于IP访问网站、基于同一IP不同端口访问网站、基于DNS域名访问网站、将不同域名解析到同一IP不同端口
本文基于Linux上CentOS 7版本配合httpd服务.nginx进行配置演示 一.基于IP搭建web服务器 1.为虚拟机网卡新添加一个ip地址并重启网卡 2. 新建配置目录并写入内容 3.编辑配 ...
- 服务器禁止某台电脑访问网站代码,禁止通过ip直接访问(apache,nginx,iis)Windows服务器操作系统 -电脑资料...
现在网站都需要备案了,如果未备案的域名解析到我们网站可能导致服务器给关了,虽然现在很多机房有防火墙白名单功能了,但是我们有些会把机器放到防火墙之外了,那么在这个时间我们就需要禁止通过ip直接访问,下面 ...
- 手机访问网站获取外网IP
哈哈,这个说白了就是手机后台访问网站,再解析获得的数据 app: http://fir.im/dpxu 可以下载看看效果 书接上文:http://blog.csdn.net/i_do_can/arti ...
- python使用代理ip访问网站_python使用代理ip访问网站的实例
实例如下所示: # -*- coding: UTF-8 -*- from urllib import request if __name__ == "__main__": #访问网 ...
- 怎么用域名访问网站?
怎么使用域名访问网站?ip地址能访问网站吗?为什么要通过域名访问网站?下面是关于怎么用域名访问网站的介绍. 一.用域名访问网站的方法? 1.网站在制作完成后,需要备有主机.网站备案等才能够正常使用. ...
- 本机用域名不能访问_域名注册申请网站域名注意事项
互联网用户越来越多,也有越来越多人搭建网站,做个人博客也好.搭建企业官网也好,数量都在逐步上升.做网站的数量在上升,域名注册量肯定也在上升. 有的朋友头一次注册域名,对域名不了解也不知道申请网站域名该 ...
最新文章
- computed set 自定义参数_完全理解Vue的渲染watcher、computed和user watcher
- 在ApacheHTTPD服务器中使用DSO完全分析
- llist对象两个属性相乘在相加_Java8使用stream实现list中对象属性的合并(去重并求和)...
- 转:python——IPy库
- oracle 基础1
- 数字图像处理:第二章 图象获取、显示、表示与处理
- Mybatis的缓存机制Cache
- 查找排序数组的最小值(js)
- Python之数据分析(规范数据生成器Faker,学习、数据分析、开发测试专用)
- 物联网架构成长之路(18)-接阿里云OSS服务
- Linux报文硬件时间戳,linux 时间戳,打戳代码分析,用于PTP报文协议(示例代码)...
- 【软件测试】使用C++ Test进行动态测试
- 在线直播系统源码,数组遍历提取,订单效果
- 计算机word中的宏,word运行宏快捷键_WORD运行宏_word中运行宏的方法_word自动运行宏...
- 谷歌浏览器帮助用户在安装前识别不受信任的扩展
- Android | Sensor.TYPE_ORIENTATION被废弃后的解决办法
- XFire野猪书-XFire开发指南第二版
- SQLDbx使用教程:SQLDbx工具如何连接数据库(MS SQLServer)
- 【中国数据创新琅琊榜】数联易康医疗大数据平台,创新健康医疗产业变革的推动者和见证者!
- 三.Oracle常用数据类型及单行函数总结