一、同端口不同域名的虚拟主机:
站点根目录为: 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 "%r" %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 "%r" %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 "%r" %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 "%r" %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 "%r" %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 "%r" %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 "%r" %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、配置说明:
appBase 是虚拟主机存放 webapp 的目录,它可以是相对路径,也可以是绝对路径。如果是相对路径,则相对于
$CATALINA_HOME,严格并准确地说是
CATALINA_BASE`。path
是 URI 的匹配路径,相当于 nginx 的location
后的路径。tomcat要求每个虚拟主机必须配置一个空字符串的 path,该条 context 作为 URI 无法被明确匹配时的默认 context,它相当于 nginx 中location / {}
的作用。docBase
则是每个 webapp 的存放目录,可以配置文件夹或者 war 包路径如果如果配置的是文件夹,它可以是相对路径,也可以是绝对路径,提供相对路径时它相对于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 的路径。)如果配置的是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/*)
-->