顶级组件-server
<Server port="8005" shutdown="SHUTDOWN">
#没有指定地址,则默认监听127.0.0.1;8005为tomcat管理端口,当本机通过telnet访问此端口,并且输入SHUTDOWN字符串,则会关闭tomcat进程;可以将监听端口改为-1,是没有-1这个端口的,所以这样不会开启8005端口,或者可以修改shutdown的字符串;
连接器组件-connector
定义tomcat监听地址及端口,connector不属于任何host,而是属于整个tomcat,所以在tomcat中使用虚拟主机只能使用基于主机名的虚拟主机,任何一个端口都是属于所有的虚拟主机;
<Connector port="8080" protocol="HTTP/1.1" #指定tomcat监听端口,指定默认协议
connectionTimeout="20000" #连接超时时长,单位是毫秒
address="192.168.39.100" #监听地址;不指定默认监听本机所有地址
maxThreads="" #最大线程数,即并发连接数,默认为200
enableLookups="" #是否启用DNS查询功能,默认会把每个客户端请求时取得的客户端地址反解为主机名,需要关闭此功能;默认是启用,禁用需要修改为false
acceptCount="" #等待队列的最大长度
secure="" #如果开启https,则需要开启此项
sslProtocol="" #指定所要使用的ssl协议,并指定证书私钥文件
redirectPort="8443" /> #如果用户试图建立ssl会话,则把请求重定向到8443端口
顶级容器组件-engine
engine就是servlet引擎;一个engine内可以运行多个虚拟主机;
<Engine name="Catalina" defaultHost="localhost" jvmRoute="">
#指定执行引擎名称;当一个engine内有多个虚拟主机,需要指定一个默认的虚拟主机;当用户请求到达tomcat时,如果不适配于某个虚拟主机的话,则使用defaultHost定义由默认虚拟主机处理;将多个tomcat实例组建为集群时,需要在前端调度器添加特殊标识符进行路由,当使用haproxy基于cookie的会话粘性,需要在每个server上使用cookie定义一个专有标识符,用于用户请求路由绑定时使用的,jvmRoute类似于基于cookie的会话绑定时,赋予当前engine唯一的标识符
定义虚拟主机的组件-host
engine会判断请求报文host首部的值,判断与哪个host组件的name名称一致,用户的请求就会被路由至哪个host组件,如果用户的请求没有匹配的host,则路由至默认的host;
<Host name="localhost" appBase="webapps" #指定虚拟主机名;指定网页文件根目录;如果访问网站的根,则网页文件必须在ROOT目录下
unpackWARs="true" autoDeploy="true"> #如果host下还有其他组件,则最后使用>结尾,如果没有其他组件,则使用/>结尾
</Host> #放在根目录下的没有展开的war格式文件是否进行自动展开,默认为true,自动展开;是否支持自动部署,生产环境为了安全,不要进行自动部署
<Host name="node1.test.com" appBase="/data/webapps" #通过多个host,指定多个虚拟主机,并且网站根的网页文件必须存放在根下的ROOT目录下
unpackWARs="true" autoDeploy="true">
</Host>
context组件
context的用法类似于nginx中的别名;context组件定义在host组件内;
<Context path="/myapp" docBase="/data/webapps/myapp" reloadable=""/>
#如果内部不再嵌套其他组件,使用自封闭标识符结束;指定访问的URL别名;指定网页文件真实路径;是否支持重载
valve组件
valve组件设置在host组件内;
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
#className指定此处的valve的类型,有实现访问控制和记录日志等其他功能,并且每种类型需要通过不同的类实现;前面的engine上禁止了客户端主机名的解析,所以此处是根据客户端IP地址,进行记录访问日志;directory指定日志存放路径;prefix指定日志名称前缀,suffix指定日志名后缀,中间为日期;pattern指定日志格式,%h表示客户端地址,%u为用户登录认证时的名称,%t为访问时间,"表示引号"本身,%r显示从哪个网站跳转过来的,%s响应码,%b响应字节数
<Valve className="org.apache.catalina.valves.RemoteCIDRValve" deny="172.20.0.0/16"/>
#通过valve实现访问控制,拒绝172.20这个网段的客户端访问tomcat;基于CIDR地址的点不需要转义,但是如果是基于主机名,则点.需要进行转义