Tomcat Server.xml结构图
![](https://img.haomeiwen.com/i152054/c8d3fceb9109d95d.png)
<?xml version='1.0' encoding='utf-8'?>
<!--
Server是顶级组件,代表一个 Tomcat 实例
可以包含一个或多个 Services ,其中每个 Service 都有自己的 Engines 和 Connectors
属性说明:
port:指定一个端口,这个端口负责监听关闭Tomcat的请求
shutdown:向以上端口发送的关闭服务器的命令字符串
-->
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<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元素只能有一个Engine元素.元素处理在同一个<Service>中所有<Connector>元素接收到的客户请求
-->
<Service name="Catalina">
<!--
Connector元素:
由Connector接口定义.<Connector>元素代表与客户程序实际交互的组件,
它负责接收客户请求,以及向客户返回响应结果.
属性说明:
port:Tomcat HTTP 服务默认在 TCP 端口8080上运行 ,可以选择1024到65535之间的任意数字作为端口号来运行 Tomcat 服务器,
connectionTimeOut:连接后最大等待时间毫秒数。默认为20秒。
redirect: 会把 SSL 请求重定向到 TCP 的8443端口。
AJP/1.3:Apache JServ Protocol connector 处理 Tomcat 服务器与 Apache HTTP 服务器之间的交互。
可以将 Tomcat 和 Apache HTTP 服务运行在一起,Apache HTTP 服务器处理静态请求和 PHP;Tomcat 服务器负责处理 Java Servlet/JSP
-->
<!--
以下:有三个Connector组件,分别开启8080,8009,443三个端口
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!--双向认证-线上-443-port配置 -->
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="/home/ca/citic/server.keystore" keystorePass="123456"
truststoreFile="/home/ca/root.truststore" truststorePass="123456"
/>
<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>
</Server>
多项目使用同一域名(多端口访问)
<Service name="Catalina">
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
<Engine defaultHost="localhost" name="Catalina">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<!-- 访问路径:localhost:8080/testA
localhost:8080/testB
localhost:8009/testA
localhost:8009/testB
-->
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log" suffix=".txt"/>
<!--注意:docBase 要使用绝对路径 -->
<Context docBase="/usr/local/tomcat/webapps/testHostA" path="/testA" reloadable="true" autodeploy="true" />
<Context docBase="/usr/local/tomcat/webapps/testHostB" path="/testB" reloadable="true" autodeploy="true" />
</Host>
</Engine>
</Service>
不同项目使用不同域名
实现多域名访问(通过同一个端口号)
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<!-- 访问路径:testA.loc:8080 -->
<Host name="testA.loc" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="/" docBase="/usr/local/tomcat/webapps/testHostA" allowLinking="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>
<!-- 访问路径:testB.loc:8080 -->
<Host name="testB.loc" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="/" docBase="/usr/local/tomcat/webapps/testHostB" allowLinking="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,每个service对应自己的端口配置
<!--liangxifeng 2018.1.6 该service实例使用8081端口访问对应网站目录是:/user/local/tomcat/webapps-->
<Service name="Catalina">
<Connector connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector SSLEnabled="true" acceptCount="100" clientAuth="true" disableUploadTimeout="true" enableLookups="true" keystoreFile="/home/lxf/java/ssl_key/ca/server/server_keystore" keystorePass="123456" maxSpareThreads="75" maxThreads="150" minSpareThreads="5" port="8443" protocol="org.apache.coyote.http11.Http11Protocol" scheme="https" secure="true" sslProtocol="TLS"/>
<Engine defaultHost="localhost" name="Catalina">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>
<Context docBase="spring-mvc-springAndspringMVC" path="/spring-mvc-springAndspringMVC" reloadable="true" source="org.eclipse.jst.jee.server:spring-mvc-springAndspringMVC"/>
<Context docBase="/usr/local/tomcat/webapps/testHost" path="/testHost" reloadable="true" source="org.eclipse.jst.jee.server:test-one"/>
</Host>
</Engine>
</Service>
<!--liangxifeng 2018.1.6 该service实例使用8082端口访问对应网站目录是:/user/local/tomcat/lxfweb/website-one-->
<Service name="Catalina2">
<Connector connectionTimeout="20000" port="8082" protocol="HTTP/1.1" redirectPort="8443"/>
<Engine defaultHost="localhost" name="Catalina2">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<Host appBase="lxfweb/website-one" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost-lxf_access_log." suffix=".txt"/>
</Host>
</Engine>
</Service>
以上配置也就是相当于apache虚拟主机的
<VirtualHost localhost:8081>
DocumentRoot /user/local/tomcat/webapps
ServerName localhost
</VirtualHost>
<VirtualHost localhost:8082>
DocumentRoot /user/local/tomcat/lxfweb/website-one
ServerName localhost
</VirtualHost>
网友评论