美文网首页
Tomcat虚拟主机配置

Tomcat虚拟主机配置

作者: 风吹我已散博客 | 来源:发表于2020-04-25 15:35 被阅读0次

    一、同端口不同域名的虚拟主机:

    站点根目录为: c:\wwwroot
    站点一目录为: c:\wwwroot\aaa, 域名为 www.aaa.com
    站点二目录为: c:\wwwroot\bbb, 域名为 www.bbb.com
    站点三目录为: c:\wwwroot\ccc, 域名为 www.ccc.com
    Tomcat 配置文件为: tomcat路径/conf/server.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <Server port="8005" shutdown="SHUTDOWN">
      <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
      <!--APR library loader. Documentation at /docs/apr.html -->
      <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
      <!-- Prevent memory leaks due to use of particular java/javax APIs-->
      <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>
        
      <!-- 不同域名访问的虚拟主机 -->
        <Service name="Catalina">
            <!-- 监听端口及协议 -->
            <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" 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.aaa.com"  appBase="c:\wwwroot" 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" />
                <Context path="" docBase="aaa" reloadable="true" deubg="0" />
            </Host>
            
            <!-- 站点二 -->
            <Host name="www.bbb.com"  appBase="c:\wwwroot" 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" />
                <Context path="" docBase="bbb" reloadable="true" deubg="0" />
            </Host>
            
            <!-- 站点三 -->
            <Host name="www.ccc.com"  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" />
                <Context path="" docBase="ccc" reloadable="true" deubg="0" />
            </Host>
            </Engine>
        </Service>
    
    </Server>
    

    二、基于端口号的虚拟主机:同IP地址不同的端口实现不同网站的访问

    站点根目录为: c:\wwwroot
    站点一目录为: c:\wwwroot\aaa, 域名为 www.aaa.com
    站点二目录为: c:\wwwroot\bbb, 域名为 www.bbb.com
    Tomcat 配置文件为: tomcat路径/conf/server.xml

    注: 若需不同域名访问将 <Host name="localhost" appBase="c:\wwwroot" unpackWARs="true" autoDeploy="true"> name 字段改为对应域名即可,多个域名可在 Host 标签内添加一个或多个 <Alias>www.abc.com</Alias> 即可。其中 Connector port、defaultHost、Hostname、appBase、docBase、日志 prefix 为你实际的即可。

    <?xml version="1.0" encoding="UTF-8"?>
    <Server port="8005" shutdown="SHUTDOWN">
      <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
      <!--APR library loader. Documentation at /docs/apr.html -->
      <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
      <!-- Prevent memory leaks due to use of particular java/javax APIs-->
      <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>
        
      <!-- 站点一 -->
        <Service name="Catalina">
            <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" 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="c:\wwwroot" unpackWARs="true" autoDeploy="true">
                <Context path="" docBase="aaa" reloadable="true" deubg="0" />
                <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="Catalina">
            <Connector port="8082" protocol="HTTP/1.1" connectionTimeout="20000" 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="c:\wwwroot" unpackWARs="true" autoDeploy="true">
                <Context path="" docBase="bbb" reloadable="true" deubg="0" />
                <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="antisec_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
            </Host>
            </Engine>
        </Service>
    
    </Server>
    

    1、注意事项

    a. 可以将不同 service 组件的 Engine name 都指定成 Catalina。
    b. 可以将不同 service 组件的 Host appBase 指定成默认的 webapps。
    c. <Context docBase="/data/java/appstore-web" path="" reloadable="true" /> 这个用于配置根路径项目,也就是 /data/java/appstore-web 包访问时是通过 ip:port 来访问,而不是传统的 ip:port/app

    2、配置说明:

    1. appBase 是虚拟主机存放 webapp 的目录,它可以是相对路径,也可以是绝对路径。如果是相对路径,则相对于 $CATALINA_HOME,严格并准确地说是 CATALINA_BASE

    2. path 是 URI 的匹配路径,相当于 nginx 的 location 后的路径。tomcat要求每个虚拟主机必须配置一个空字符串的 path,该条 context 作为 URI 无法被明确匹配时的默认 context,它相当于 nginx 中 location / {} 的作用。

    3. docBase 则是每个 webapp 的存放目录,可以配置文件夹或者 war 包路径

    4. 如果如果配置的是文件夹,它可以是相对路径,也可以是绝对路径,提供相对路径时它相对于appBase。该目录一般在 appBase 的目录下,但并不规定一定要放在 appBase 下,比如
      <Context docBase="/data/java/appstore-web" path="" reloadable="true" />
      就会将这个文件夹当成ROOT web来访问,访问地址是ip:port 而不是ip:port/appstore-web
      (对于web服务来说,它相当于nginx的 root 指令,但对于 webapp 来说,一个context就相当于一个webapp,而 docBase 正是 webapp 的路径。)

    5. 如果配置的是war文件,比如
      <Context docBase="/data/java/appstore-web.war" path="" reloadable="true" />
      就会将这个jar文件解压到 webapps 的 ROOT 文件夹中,当成 ROOT web 来访问,访问地址是ip:port 而不是 ip:port/appstore-web

    三、多tomcat运行

    假设:
    第一个tomcat文件夹为tomcat8-1,路径为 /home/tomcat8-1/
    第二个tomcat文件夹为tomcat8-2,路径为 /home/tomcat8-2/
    分别修改 tomcat 文件夹 /conf 目录下 server.xml 的监听端口为不同端口。
    分别启动 tomcat 文件夹 /bin 目录下的 startup.sh 启动tomcat,停止同上文。
    即可运行多个tomcat。

    四、Tomcat绑定SSL证书

    注:根据官方文档 tomcat8.5 且 JAVA7 及其以上才支持 SNI。如果 tomcat 版本较低且需要绑定多个域名情况下,建议使用反向代理方式部署 HTTPS。
    <Connector port="8080"> 配置字段下新增 443 端口监听设置即可。
    注:若IIS反向代理tomcat绑定https时,选择上启用SSL卸载。以免tomcat未配置HTTPS访问的情况下请求得不到正常响应。
    如:

    <Connector port="443"
        protocol="HTTP/1.1"
        SSLEnabled="true"
        scheme="https"
        secure="true"
        keystoreFile="pfx证书路径"
        keystoreType="PKCS12"
        keystorePass="证书导入密码"
        clientAuth="false"
        ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
        SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
        SSLCipherSuite="ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4"/>
    

    三、Tomcat开启manager和host-manager界面

    修改配置文件 tomcat路径/conf/tomcat-users.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <tomcat-users xmlns="http://tomcat.apache.org/xml"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
                  version="1.0">
                  
    <!-- 角色配置 -->
    <role rolename="admin-gui"/>
    <role rolename ="manager-gui"/>
    <role rolename ="manager-status"/>
    <role rolename ="manager-script"/>
    
     <!-- 用户配置 -->
     <user username="admin" password="000000" roles="admin-gui,manager-gui,manager-status,manager-script"/>
    </tomcat-users>
    
    <!-- 
    角色说明 
    admin-gui           //允许访问html图形用户界面GUI
    manager-gui         //允许访问html接口(即URL路径为/manager/html/*)
    manager-script      //允许访问纯文本接口(即URL路径为/manager/text/*)
    manager-jmx         //允许访问JMX代理接口(即URL路径为/manager/jmxproxy/*)
    manager-status      //允许访问Tomcat只读状态页面(即URL路径为/manager/status/*)
    -->
    

    相关文章

      网友评论

          本文标题:Tomcat虚拟主机配置

          本文链接:https://www.haomeiwen.com/subject/vmrkwhtx.html