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

站点根目录为: 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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Server port="8005" shutdown="SHUTDOWN">
  3. <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  4. <!--APR library loader. Documentation at /docs/apr.html -->
  5. <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  6. <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  7. <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  8. <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  9. <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  10. <GlobalNamingResources>
  11. <Resource name="UserDatabase" auth="Container"
  12. type="org.apache.catalina.UserDatabase"
  13. description="User database that can be updated and saved"
  14. factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
  15. pathname="conf/tomcat-users.xml" />
  16. </GlobalNamingResources>
  17. <!-- 默认站点 -->
  18. <Service name="Catalina">
  19. <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
  20. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  21. <Engine name="Catalina" defaultHost="localhost">
  22. <Realm className="org.apache.catalina.realm.LockOutRealm">
  23. <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/></Realm>
  24. <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
  25. <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" />
  26. </Host>
  27. </Engine>
  28. </Service>
  29. <!-- 不同域名访问的虚拟主机 -->
  30. <Service name="Catalina">
  31. <!-- 监听端口及协议 -->
  32. <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
  33. <Engine name="Catalina" defaultHost="localhost">
  34. <Realm className="org.apache.catalina.realm.LockOutRealm">
  35. <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/></Realm>
  36. <!-- 站点一 -->
  37. <Host name="www.aaa.com" appBase="c:\wwwroot" unpackWARs="true" autoDeploy="true">
  38. <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" />
  39. <Context path="" docBase="aaa" reloadable="true" deubg="0" />
  40. </Host>
  41. <!-- 站点二 -->
  42. <Host name="www.bbb.com" appBase="c:\wwwroot" unpackWARs="true" autoDeploy="true">
  43. <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" />
  44. <Context path="" docBase="bbb" reloadable="true" deubg="0" />
  45. </Host>
  46. <!-- 站点三 -->
  47. <Host name="www.ccc.com" appBase="E:/学习/activeMq/app2" unpackWARs="true" autoDeploy="true">
  48. <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" />
  49. <Context path="" docBase="ccc" reloadable="true" deubg="0" />
  50. </Host>
  51. </Engine>
  52. </Service>
  53. </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/*)
-->