我们在应用服务器上部署web应用的时候,常常想要在一台服务器上部署多个网站。这时候我们就可以通过虚拟主机技术来实现。
任何web服务器都是支持虚拟主机技术的,要完全明白什么是虚拟主机技术,我们要搞清楚下面的内容。
首先就是多个域名可以解析到同一个ip地址。我们的虚拟主机技术就是利用这一点来实现的。一般情况下,我们标识一个网站是通过网站的ip和端口以及网站项目名称来标识的。
在测试环境下,你可以通过修改成不同的端口,或者修改网站的项目名称来实现在同一台主机下部署多个网站。
但是在真正的生产环境下,我们的网站往往都是采用的80端口,而且都是不带有网站目录路径的。这个时候就可以通过不同的域名来对网站加以区分了。具体的实现过程是这样的,首先通过配置域名解析,将多个域名都解析到同一个主机ip,然后我们在该主机上通过配置来让主机可以将来自不同域名的请求转发给不同的网站程序去处理。主机会截获到请求的请求头信息,然后获取到host这个请求头的值,这个值也就是该请求的来源域名。主机根据所配置的域名与网站程序的对应关系,将来自不同的域名的请求转发给不同的程序去处理。
这种配置域名和处理程序的对应关系在不同的环境下配置方法不一样,但是原理都是一样的。在iis环境下,叫做主机头配置。意思就是配置请求报文的请求头中的主机头(host请求报文头)和主机上的网站目录的对应关系。在apache,ngnix环境下,则是直接通过配置文件cfg文件来配置不同的域名和网站根目录之间的映射关系的。
有了这个映射关系以后,那么主机在接到请求时,首先就会获得该请求来在哪个域名,然后根据配置的域名到网站根目录的对应关系,将该请求转发给对应的网站根目录去进行处理。
这样就实现了一个ip一个80端口上部署无穷多个网站的效果。
通过上面的分析,我们知道,在虚拟主机技术中,它是采用域名,ip和端口来表示一个网站的,虽然ip和端口都是完全一样的,但是我们仍然可以实现在同一台主机上部署多个网站,然后让不同的域名映射到这些不同的网站的功能。