虚拟主机的概念:
虚拟主机是指用一台主机运行多个站点,一般分为,基于域名的虚拟主机,基于IP的虚拟主机和基于端口的虚拟主机
基于域名的虚拟主机:比如有三个站点,www.a.com, www.b.com 和www.c.com,它们都部署在一台主机上,web服务器根据访问的域名的不同,返回各个站点的页面
基于IP的虚拟主机:原理类似于上面,但是域名的不同换成了ip的不同,这样每个站点有自己的独立IP
基于端口的虚拟主机:访问不同的端口返回不同的站点,这些站点的域名和IP没有限制,可以是相同的也可以是不同的
Tomcat的虚拟主机:
一般情况下,tomcat只能配置基于域名和IP的虚拟主机,只需要在server.xml里面增加host即可
举例:
<Host name="www.a.com" debug="0" appBase="e:\VSB2006\owners\www.a.com" unpackWARs="true"
autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="www.a.com_log."
suffix=".txt" timestamp="true" />
</Host>
基于端口的Tomcat虚拟主机
Tomcat的文档中和网上都无法找到基于端口的虚拟主机的配法,经过尝试,发现了一个方法可以达到这个效果。
我们看一个最精简的server.xml:
<Server port="8005" shutdown="SHUTDOWN">
….省略
<Service name="Catalina">
<Connector port="8080" /> <!—这是对外的主要端口-->
<Connector port="8009" protocol="AJP/1.3" /> <!—这是给apache使用的端口-->
<Engine name="Catalina" defaultHost="localhost"> <!—引擎-->
<Logger className="org.apache.catalina.logger.FileLogger" />
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase" />
<Host name="localhost" appBase="webapps" /> <!—默认的主机-->
</Engine>
</Service>
</Server>
虽然可以增加Connector来增加服务的端口,但是host中没有提供端口的选项,这样增加出来的端口和源端口是一样的虚拟主机设定,无法打到我们的要求。
单纯增加端口没有办法,那么我们可以增加service,举例如下:
<Server port="8005" shutdown="SHUTDOWN">
….省略
<Service name="Catalina">
<Connector port="8080" /> <!—这是对外的主要端口-->
<Connector port="8009" protocol="AJP/1.3" /> <!—这是给apache使用的端口-->
<Engine name="Catalina" defaultHost="localhost"> <!—引擎-->
<Logger className="org.apache.catalina.logger.FileLogger" />
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase" />
<Host name="localhost" appBase="webapps" /> <!—默认的主机-->
</Engine>
</Service>
<Service name="Catalina2">
<Connector port="8090" /> <!—这是对外的主要端口-->
<Engine name="Catalina2" defaultHost="localhost"> <!—引擎-->
<Logger className="org.apache.catalina.logger.FileLogger" /><!—这一块有所省略,应该配置不同的文件名-->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase" />
<Host name="localhost" appBase="webapps2" /> <!—默认的主机-->
</Engine>
</Service>
</Server>
增加的serv ice可以分配自己的connector和host,只要和主service不冲突即可
(这个测试通不过,慎用!)
通过这个办法,可以让vsb2006的管理端运行在一个端口上,而站点运行在另外的端口上,完全不冲突