1 虚拟主机
要讨论 SNI 的问题,首先需要来介绍一个虚拟主机的概念。
1.1 概念
虚拟主机一般使用的技术为软硬件,它可以把一台真实的物理电脑主机进行划分,让它变成多个逻辑的存储单元,每一个单元中不会再有物理的实体,但是在单元内,却可以和真实的物理主机一样正常的工作,实现 IP 地址,单独的域名,完整的 Internet 服务器的工作。其中关键一点就是,虚拟主机的主要技术是在同一操作系统,同一硬件平台上,也能为用户提供不同的服务,且服务间互不干扰。
1.2 实现
各种服务器软件都可以实现虚拟主机的配置,例如 Apache, nigx 等。其中
Apache 虚拟主机实现有 三种方法:
通过不同的 IP 地址
通过不同的域名
通过不同的端口
2 SNI(服务器名称指示)
在互联网爆发的今天,网络安全问题越来越受到重视,也带来了目前的 https 大热的盛况。而 SSL证书是 https是加密协议的最常见解决方案。但是 https 在使用的过程中因为 SSL 证书而存在一个问题。
问题由来:由于服务器能力的增强,在一台物理服务器上部署多个虚拟主机已经成为十分流行的做法了。在过去的 HTTP 时代,解决基于名称的主机同一 ip 地址上托管多个网站的问题并不难。当一个客户端请求某特定网站时,把请求的域名作为主机头(host)放在 http header 中,从而服务器根据域名可以知道把该请求引向哪个域名服务,并把匹配的网站传送给客户端。但是此方式到 https 就失效了,因为 SSL 在握手的过程中,不会有 host 信息ÿ