且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Tomcat 虚拟主机配置

更新时间:2022-09-17 20:31:07

一、什么是虚拟主机

一台物理机上搭建多个web站点,每个web站点独立运行,互不干扰,这些站点就是"虚拟主机"。

虚拟主机的实现方式:

1、基于主机名的虚拟主机:多个域名解析到同一个IP地址,在WEB服务器里添加多个站点,每个站点设定一个主机名。HTTP协议请求里包含了主机名信息,当WEB服务器收到访问请求时,就可以根据不同的主机名来访问不同的网站。

步骤:

a、配置域名与Ip的映射管理(对于本地局域网我们使用在host文件中添加;对于大型网络或者外网网络则需要配置DNS服务器中Ip地址与域名的映射关系)

在C:\Windows\System32\drivers\etc\hosts文件末尾添加:

127.0.0.1 www.jalja1.org
127.0.0.1 www.jalja2.org

b、配置server.xml

Tomcat 虚拟主机配置

        <Host name="www.jalja1.org"  appBase="E:/学习/activeMq/app1" unpackWARs="true" autoDeploy="true">
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
            prefix="localhost_access_log." suffix=".txt"
            pattern="%h %l %u %t &quot;%r&quot; %s %b" />
        </Host>

            <Host name="www.jalja2.org"  appBase="E:/学习/activeMq/app2" unpackWARs="true" autoDeploy="true">
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
            prefix="localhost_access_log." suffix=".txt"
            pattern="%h %l %u %t &quot;%r&quot; %s %b" />
        </Host>

Tomcat 虚拟主机配置

c、测试

http://www.jalja1.org:8080/

http://www.jalja2.org:8080/

2、基于端口号的虚拟主机:一个IP地址,通过不同的端口实现不同网站的访问。

步骤:在server.xml 中 设置两个service组件

Tomcat 虚拟主机配置

  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>
        <Host name="www.jalja1.org"  appBase="E:/学习/activeMq/app1" unpackWARs="true" autoDeploy="true">
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
            prefix="localhost_access_log." suffix=".txt"
            pattern="%h %l %u %t &quot;%r&quot; %s %b" />
        </Host>
    </Engine>
  </Service>
  
  <Service name="Catalina2">
    <Connector port="8888" protocol="HTTP/1.1"  connectionTimeout="20000" redirectPort="8443" />
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina2" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>
        <Host name="www.jalja1.org"  appBase="E:/学习/activeMq/app2" unpackWARs="true" autoDeploy="true">
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
            prefix="localhost_access_log." suffix=".txt"
            pattern="%h %l %u %t &quot;%r&quot; %s %b" />
        </Host>
    </Engine>
  </Service>

Tomcat 虚拟主机配置

http://www.jalja1.org:8888/

http://www.jalja1.org:8080/

 

3、基于IP地址的虚拟主机:服务器使用多网卡配置多个IP地址,然后配置WEB服务器,把多个网站绑定在不同的IP上。(该方式浪费Ip资源,tomcat不支持该方式)

 

二、tomcat目录结构:

Tomcat 虚拟主机配置

bin:tomcat启动关闭脚本文件。

conf:tomcat各种配置文件。其核心配置文件:

  1、server.xml 配置与server相关信息

  2、web.xml web应用(一个web应用相当于一个站点)

  3、tomcat-users.xml 配置tomcat相关信息(tomcat用户名 密码 权限)

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="admin-gui"/>
  <user username="tomcat" password="tomcat" roles="admin-gui"/>
</tomcat-users>

lib:tomcat启动依赖的jar包

logs:tomcat日志

temp:tomcat运行是产生的临时文件

webapps:web应用所在的目录,即提供外界访问的web资源存放目录。

work:tomcat工作目录,主要用于存放jsp被访问后生成对应的servlet文件以及class文件。

 

三、tomcat处理HTTP请求的过程

1、tomcat各个组件的关系(tomcat7)

Tomcat 虚拟主机配置

<?xml version='1.0' encoding='utf-8'?><Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JasperListener" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <GlobalNamingResources>
        <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
        <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
        <Engine name="Catalina" defaultHost="localhost">
              <Realm className="org.apache.catalina.realm.LockOutRealm">
                  <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
              </Realm>
              <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
                  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
              </Host>
        </Engine>
  </Service></Server>

Tomcat 虚拟主机配置

-          Server  server元素是JVM的入口点,整个配置文件只有一个,因为server不是容器(container),因此不能嵌套子组件.server在某一指定的端口监听shutdown命令.server可以包含一个或多个service实。

-          Service service有共享同一个Container的一个或多个Connectors组成,一般Service就是一个Engine,但没有明确规范要求如此.因为Service不是一个Container,因此不能在里面嵌套子组件(比如Loggers/Valves)。

-          Connector connector就是一个Tomcat与客户端的连接,Tomcat有两种典型的Connector:http,JK2.http connector监听来自Browser的连接(通常在我们熟悉的8080端口),JK2.来自其他WebServer的请求(默认在8009端口监听)。Connector会把获得的请求交给Engine处理。

-          Engine Engine下可以配置多个虚拟主机Virtual Host,每个虚拟主机都有一个域名当Engine获得一个请求时,它把该请求匹配到某个Host上,然后把该请求交给该Host来处理Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理。

-          Host host代表一个虚拟主机,默认是localhost,host下可以部署多个web application,在我们实际应用中一般要考虑问题的对象就是host。

-          Context  context代表一个WEB应用

2、请求处理流程

Tomcat 虚拟主机配置

 

处理流程:用户发送请求到web服务器,该请求会被正在监听的Connector连接器接收,并把该请求交给Service下的Engine来处理,并等待Engine处理的结果。Engine获得请求后会根据请求的主机信息来匹配相应的Host主机,Host主机会根据请求的路径匹配对应的Context,Context web应用匹配上之后就构建request、response请求对象,调用指定的Servlet来处理请求。请求处理完成后会将response对象返回给Host主机,Host主机将response对象返回给Engine引擎,Engine再将response对象返回给Connector链接器,最后Connector连接器将response返回给浏览器。














本文转自xsster51CTO博客,原文链接:http://blog.51cto.com/12945177/1950726 ,如需转载请自行联系原作者