Tomcat 虛擬主機配置


一、什么是虛擬主機

一台物理機上搭建多個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

        <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>

c、測試

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

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

2、基於端口號的虛擬主機:一個IP地址,通過不同的端口實現不同網站的訪問。

步驟:在server.xml 中 設置兩個service組件

  <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>

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

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

 

3、基於IP地址的虛擬主機:服務器使用多網卡配置多個IP地址,然后配置WEB服務器,把多個網站綁定在不同的IP上。(該方式浪費Ip資源,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)

<?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>

-          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代表一個虛擬主機,默認是localhosthost下可以部署多個web application,在我們實際應用中一般要考慮問題的對象就是host。

-          Context  context代表一個WEB應用

2、請求處理流程

 

處理流程:用戶發送請求到web服務器,該請求會被正在監聽的Connector連接器接收,並把該請求交給Service下的Engine來處理,並等待Engine處理的結果。Engine獲得請求后會根據請求的主機信息來匹配相應的Host主機,Host主機會根據請求的路徑匹配對應的Context,Context web應用匹配上之后就構建request、response請求對象,調用指定的Servlet來處理請求。請求處理完成后會將response對象返回給Host主機,Host主機將response對象返回給Engine引擎,Engine再將response對象返回給Connector鏈接器,最后Connector連接器將response返回給瀏覽器。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM