用单台虚拟主机实现多个域名

即使物理层面只有一台服务器,但只要使用虚拟主机的功能(Virtual Host),则可以假想已具有多台服务器,搭建多个WEB站点,持有各自的域名,运行各自的网站。

客户端使用HTTP协议访问服务器时,主机名和域名会通过DNS服务映射到ip地址访问目标网站。如果一台服务器托管了多个域名,就需要知道是访问哪个域名。

因此在发送HTTP请求时,必须在Host首部内完整地指定主机名或域名的URI。

通讯数据转发程序:代理、网关、隧道

  1. 代理

    代理服务器的基本行为就是接收客户端发送的请求后转发给其他服务器。代理不改变URI,会直接发给前方持有资源的目标服务器。

    这个过程可以级联多台服务器,转发时,需要附加Via首部字段以标记出经过的主机信息。

    持有资源实体的服务器叫做源服务器。从源服务器返回的响应经过代理服务器再传给客户端。

    使用代理服务器的理由

    按两种基准分类,一是是否使用缓存,另一种是是否修改报文。

    • 利用缓存技术减少带宽流量

      代理转发响应时缓存代理(Caching Proxy)会预先将资源的副本(缓存)保存在代理服务器上。

      当代理再次接受到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前缓存的资源作为响应返回。

    • 透明代理
      转发请求或响应时,不对报文做任何加工的代理类型称为透明代理(Transparent Proxy)。反之称为非透明代理。

    此外使用代理服务器还可以组织内部针对特定网站进行访问控制,获取访问日志等。

  2. 网关

    网关能使通讯线路上的服务器提供非HTTP通讯协议。

    利用网关能提高通讯的安全性,因为可以在客户端和网关之间的通讯线路上加密以确保通讯的安全。

    接收客户端发来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端也不能分辨自己的通信目标是一个网关。

  3. 隧道

    隧道是在相隔甚远的客户端和服务器之间进行中转。并保持双方通信连接的应用程序,确保客户端和服务器端能进行安全的通信。

    隧道本身不解析HTTP请求,原样中转给之后的服务器。

    隧道会在通信双方断开连接时结束。