• 虚拟主机——《HTTP权威指南》第18章读书笔记


    (ps:很多天前就已经看了这一章节,但是由于各种事,没有整理和回顾,也没有时间去看新书或者写写代码什么的,之前一直没有搞明白一个机器上怎么样放置多个网站,觉得这个东西很神奇,现在看了这一章也清楚了,不觉得神奇了)
     
      随着web的发展,每个人都想要一个网站,但是很少有人有能力或者时间来搭建带空调房的服务器机房,注册域名,或购买网络带宽。对应着这种需求出现了专业化的web主机托管服务,服务级别有很多种,托管者出租服务和网站管理业务,并提供不同程度的安全级别、报告及易用性。许多web托管者通过让一些顾客共享一台计算机来提供便宜的web主机托管服务,这称为共享主机或者虚拟主机托管。每个网站看起来是托管在不同的服务器上,但是实际上托管在同一个物理服务器上。那么这样会出现一个问题如果让我们去管理这一样台设备,怎么样去把域名对应相应的ip再对应到相应的web目录下?(本文讨论怎么样去解决上述问题,不过多涉及怎么样搭建虚拟主机,在文章最后给出搭建方法的参考)
      在HTTP/1.0中有一个设计缺陷会让虚拟主机托管者抓狂。HTTP/1.0规范中没有为共享的web服务器提供任何方法来识别要访问的是那个虚拟网站。在HTTP/1.0请求在报文中只发送了url的路径部分。如果要访问http://www.xxx.com/index.html,浏览器会发送连接到服务器www.xxx.com,但是HTTP/1.0请求中只提到GET /index.html,没有提到主机名。如果服务器托管了多个站点,就没以有足够的信息来标识一哪个虚拟网站 。
      缺失主机信息是原始HTTP规范的疏忽,它错误的假设每个web服务器上只托管了一个网站。在这个期间涌现了以下4种技术来解决这个问题。
    (1)通过URL路径进行虚拟主机托管
    在url中添加专门的路径部分,以便服务器判断是哪个网站。
    (2)通过端口号进行主机托管
    为每个站点分配一个端口号。
    (3)通过IP地址进行主机托管
    为不同的虚拟站点分配专门的ip地址,把这些地址绑定到一台单独的机器上。
    (4)通过Host首部进行主机托管
    通过Htpp/1.0增强版和HTTP/1.1正式版定义Host请求首部来携带网站名称。
     
    通过URL路径进行虚拟主机托管
    通过分配不同的url路径,把共享服务器上的虚拟站点隔离开。
    如:
    当请求到达服务时,其中并没有主机信息,但是服务器可以通过路径来区分它们。请求zyt的网址是:GET /zyt/index.html,请求icrt的网址是: GET /icrt/index.html 这不是一个好办法/zyt 和/icrt是多余的,更坏的是http://www.xx123.com和http://www.xx356.com不能用了。
    这种方案在实际中很少会用到。
     
    通过端口号进行主机托管
    可在在web服务器上为不同网站指定不同的端口号,不再使用80端口,而是采用其它端口号。这个解决方案也有问题:终端用户不乐意在url中指定非标准的端口号。如http://www.xx123.com:89
     
    通过IP地址进行主机托管
    通过ip地址进行主机托管,是一个更常用、更好的办法。为每个虚拟网站分配一个或者多个唯一的ip地址。所有虚拟网站的ip地址都绑定到同一个共享服务器上。服务器可以查询http连接的目的ip地址,并以此来判断客户端的目标网站。
    如:把ip:209.173.34.3分配给www.xxx123.com,把ip:209.172.34.2分配给www.xx356.com,把这两个ip地址都绑定到同一物理服务器上。
    但是这样做也会带来一些麻烦:
    首先在计算机系统上能够绑定的虚拟ip地址通常是有限制的,其次ip地址是稀缺资源,最后托管都通过复制服务器来增加容量时,ip地址短缺的问题就更加严重了。
    尽管有这样的缺陷,但是它仍然得到广泛的应用。
     
    通过Host首部进行主机托管
    为了避免过度的地址消耗和虚拟ip地址的限制,我们希望在虚拟站点间共享同一个ip地址,且仍然能够区分站点。为了解决这个问题,浏览器来服务器的实现都扩展了HTTP,把原始主机名给了服务器。不过,浏览器不能只发送完整的URL,因为这会使许多只能接收路径的服务器无法工作。替代的方法是,把主机名和端口号放在所请求的Host扩展首部中传送。
     
    绝大多数现代浏览器和服务器都支持Host首部,但仍然有一些客户端以及网络机器人不支持它。
     
    虚拟主机搭建:
    apache可以参考:《Apache管理员手册》第七章或者apache官方手册
    nginx可以参考:《Nginx取代Apache的高性能web服务器》第3章或者Nginx官方手册
  • 相关阅读:
    idea使用配置lombok插件
    微服务框架搭建总结点(一):Springboot整合log4j2日志
    git使用笔记:git commit后,如何撤销commit
    SQL Server中char,varchar,nchar, nvarchar的区别
    SQL插入语句插入自增的主键后,如何获取这个新增的主键值
    Linq分组后,再对分组后的每组进行内部排序,获取每组中的第一条记录
    Flutter 笔记
    gch
    JVM内存观察
    mybatis for 循环 中oracle in 条件后 多余1000条处理
  • 原文地址:https://www.cnblogs.com/zhouyongtao/p/2914730.html
Copyright © 2020-2023  润新知