tomcat配置文件

 

目录和配置文件相关说明

目录结构
bin 	服务启动、停止等相关
conf 	配置文件
lib 	库目录
logs 	日志目录
webapps 应用程序,应用部署目录
work 	jsp编译后的结果文件

配置文件
server.xml	 	主配置文件
web.xml		 	(主页定义)每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置,(如果没有定义,会被上一级的conf/定义所匹配)
context.xml  	每个webapp都可以专用的配置文件,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中;此文件为所有的
webapps		 	提供默认配置
tomcat-users.xml 	  用户认证的账号和密码文件
catalina.policy 	  当使用-security选项启动tomcat时,用于为tomcat设置安全策略
catalina.properties   Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数
logging.properties 	  日志级别的设定,日志系统相关的配置。log4j顶级组件


JSP WebApp下目录结构
	主页配置:	一般指定为index.jsp或index.html
	WEB-INF/:	当前WebApp的私有资源路径,通常存储当前应用使用的web.xml和context.xml配置文件(没定义就会继承${catalina.base}/conf/的web.xml和context.xml)
	META-INF/:	类似于WEB-INF
	classes/:	类文件,当前webapp需要的类
	lib/:		当前应用依赖的jar包


组件分类
顶级组件  		Server,代表整个Tomcat容器,也叫进程实例,
服务类组件		Service,组织Engine和Connector,里面只能包含一个Engine
连接器组件		Connector,有HTTP、HTTPS、A JP协议的连接器
容器类			Engine、Host、Context都是容器类组件,可以嵌入其它组件,内部配置如何运行应用程序。
内嵌类			可以内嵌到其他组件内,valve、logger、realm、loader、manager等。以logger举例,在不同容器组件内定义。
集群类组件		listener、cluster


Tomcat的核心组件层次:server.xml
<Server>
	<Service>
		<connector/>
		<connector/>
		...
		<Engine>
			<Host>
			    <Context/>
			    <Context/>
				  ...
			</Host>
			<Host>
			         ...
			</Host>
			...
		</Engine>
	</Service>
</Server>
			
配置文件或核心组件说明:
server Tomcat运行的进程实例
	port指定一个端口,这个端口负责监听关闭tomcat 的请求
	shutdown指定向端口发送的命令字符串


service 用来组织Engine和Connector的关系,
	name指定service 的名字,通常是”Catalina”

Connector ( 表示客户端和service之间的连接)负责客户端的HTTP、HTTPS、A JP等协议的连接。一个Connector只属于某一个Engine
	port			指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求
	minProcessors	服务器启动时创建的处理请求的线程数
	maxProcessors	最大可以创建的处理请求的线程数
	maxThreads		服务器创建的最大线程数
	minSpareThreads	最小剩余线程数
	maxSpareThreads	最大剩余线程数
	enableLookups	如果为true ,则可以通过调用request.getRemoteHost() 进行DNS 查询来得到远程客户端的实际主机名,若为false 则不进行DNS 查询,而是返回其ip 地址
	redirectPort	指定服务器正在处理http 请求时收到了一个SSL 传输请求后重定向的端口号
	acceptCount		指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
	connectionTimeout指定超时的时间数( 以毫秒为单位)

Engine ( 表示指定service 中的请求处理机,接收和处理来自Connector的请求),响应并处理用户请求。一个引擎上可以绑定多个Connector
	defaultHost指定缺省的处理请求的主机名,name:指定Engine的名字,通常是”Catalina”  
	defaultHost:指定默认的处理请求的主机名,至少与某个host元素的name属性值是相同的.
	jvmRoute:在启用session粘性时指定使用哪种负载均衡的标识符。所有的tomcat server实例中该标识符必须唯一,它会追加在session标识符的尾部,因此能让前端代理总是将特定的session转发至同一个tomcat实例上。注意,jvmRoute同样可以使用jvmRoute的系统属性来设置。如果此处设置了jvmRoute,则覆盖jvmRoute系统属性。

Context ( 表示一个web 应用程序,通常为WAR 文件,应用的上下文,配置路径映射path => directory	,)
	docBase应用程序的路径或者是WAR 文件存放的路径
	path表示此Web应用程序的url的入口,如为“/hello“,则请求的URL为http://localhost:8080/hello/reloadable:如果为true,则Tomcat在运行时会自动监视Web应用的/WEB-INF/lib和/WEB-INF/classes下文件的改动,自动装载新应用,使我们可以在不重启Tomcat的情况下更新Web应用
	reloadable这个属性非常重要,如果为true ,则tomcat 会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes 目录的变化,自动装载新的应用程序,我们可以在不重起tomcat 的情况下改变应用程序

host ( 表示一个虚拟主机 )
	name指定主机名
	debug指定日志级别
	truealias指定虚拟主机的别名,可以指定多个别名
	appBase应用程序基本目录,即存放应用程序的目录,相对路径也可以,(创建的每个HOST下的appBase都要有ROOT文件夹。)
	unpackWARs如果为true,则tomcat会自动将WAR文件解压后运行,否则不解压而直接从WAR文件中运行应用程序autoDeploy:如果为true,表示Tomcat启动时会自动发布appBase目录下所有的Web应用(包括新加入的Web应用)
	deployOnStartup如果此项为true,表示Tomcat服务器启动时会自动发布appBase目录下所有Web应用。如果Web应用在server.xml中没有相应的<Context>元素,则将采用默认的Context配置。deployOnStarup的默认设置是

Logger ( 访问日志信息)
	className指定logger 使用的类名,此类必须实现org.apache.catalina.Logger 接口
	prefix指定log 文件的前缀
	suffix指定log 文件的后缀
	timestamp如果为true ,则log 文件名中要加入时间,如下例:localhost_log.2001-10-04.txt
	txtdirectory:指定log文件存放的目录

Realm ( 表示存放用户名,密码及role 的数据库)
	className指定Realm 使用的类名,此类必须实现org.apache.catalina.Realm 接口

Valve ( 功能与Logger 差不多,其prefix 和suffix 属性解释和Logger 中的一样)
	className指定Valve 使用的类名,如用org.apache.catalina.valves.AccessLogValve 类可以记录应用程序的访问信息
	directory指定log 文件存放的位置
	pattern有两个值,common 方式记录远程主机名或ip 地址,用户名,日期,第一行请求的字符串,HTTP 响应代码,发送的字节数。combined 方式比common 方式记录的值更多


核心组件说明
Tomcat启动一个Server进程。可以启动多个Server,但一般只启动一个
创建一个Service提供服务。可以创建多个Service,但一般也只创建一个
	每个Service中,是Engine和其连接器Connector的关联配置
可以为这个Server提供多个连接器Connector,这些Connector使用了不同的协议,绑定了不同的端口。其作用就是处理来自客户端的不同的连接请求或响应
Service内部还定义了Engine,引擎才是真正的处理请求的入口,其内部定义多个虚拟主机Host
	Engine对请求头做了分析,将请求发送给相应的虚拟主机
	如果没有匹配,数据就发往Engine上的defaultHost缺省虚拟主机
	Engine上的缺省虚拟主机可以修改
	Host定义虚拟主机,虚拟主机有name名称,通过名称匹配
Context定义应用程序单独的路径映射和配置

  

  

 

 

客户端请求过程:		
	浏览器端的请求被发送到服务端端口8080,Tomcat进程监听在此端口上。通过侦听的HTTP/1.1 Connector获得此请求。
	Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的响应
	Engine获得请求localhost:8080/test/index.jsp,匹配它所有虚拟主机Host
	Engine匹配到名为localhost的Host。即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机
	localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context
	Host匹配到路径为/test的Context
	path=/test的Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet
	Context匹配到URL PATTERN为 *.jsp 的servlet,对应于JspServlet类构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法。
	Context把执行完了之后的HttpServletResponse对象返回给Host
	Host把HttpServletResponse对象返回给Engine
	Engine把HttpServletResponse对象返回给Connector
	Connector把HttpServletResponse对象返回给浏览器端

  根目录说明

tomcat 目录说明

Tomcat中默认网站根目录是CATALINA_BASE/webapps/
在Tomcat中部署主站应用程序和其他应用程序,和之前WEB服务程序不同。
nginx
    假设在nginx中部署2个网站应用eshop、bbs,假设网站根目录是/var/www/html,那么部署可以是这样的。
    eshop解压缩所有文件放到/var/www/html/目录下。   
    bbs的文件放在/var/www/html/bbs下。                 
Tomcat
    Tomcat中默认网站根目录是CATALINA_BASE/webapps/
    在Tomcat的webapps目录中,有个非常特殊的目录ROOT,它就是网站默认根目录。  
    将eshop解压后的文件放到这个ROOT中。                                           #www.abc.com
    bbs解压后文件都放在CATALINA_BASE/webapps/bbs目录下。                     
两者的区别在于 前者是在html下的bbs,后面的bbs跟ROOT是平级目录。访问方式是一样的。 #www.abc.com/bbs


每一个虚拟主机的目录都可以使用appBase配置自己的站点目录,里面都可以使用ROOT目录作为主站目录。
[root@localhost7e WEB-INF]# cat  /usr/local/tomcat/conf/server.xml 
            ............
            ............
      <Host name="www.aaa.com"  appBase="webapps" unpackWARs="true" autoDeploy="true">      
        <Context path="/aaa" docBase="" reloadable="false" />                               
        <Context path="/bbb" docBase="bbs" reloadable="false" />                            
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhostA_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>

      <Host name="www.bbb.com"  appBase="website" unpackWARs="true" autoDeploy="true">   #website自动创建,里面的ROOT要自己创建。
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
               prefix="localhostB_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
      
访问路径和真实路径      
    #www.aaa.com/index.html ==> webapps/ROOT/index.html
    #www.aaa.com/aaa/index.html ==> webapps/index.html
    #www.aaa.com/bbb/index.html ==> webapps/bbs/index.html
    

说明:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="/test1" docBase="" reloadable="false" />  

#docBase=""不写表示继承了本<Host下的appBase路径 ,path表示此Web应用程序的url的入口,如为“/test1“,则请求的URL为http://localhost:8080/test1

-------------------------------------------------------------------------------------------------------------------------------------

8005是Tomcat的管理端口,默认监听在127.0.0.1上。SHUTDOWN这个字符串接收到后就会关闭此Server。
telnet 127.0.0.1 8005
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SHUTDOWN
这个管理功能建议禁用,改shutdown为一串猜不出的字符串。 <Server port="8005" shutdown="44ba3c71d57f494992641b258b965f28">


-------------------------------------------------------------------------------------------------------------------------------------
Manager App管理 、 Host Manager虚拟主机管理 
                                                          
cat /use/local/tomcat/server.xml
    <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>

配置文件是conf/tomcat-users.xml。
    <role rolename="manager-gui"/>  #App管理
    <role rolename="admin-gui"/>    #虚拟主机管理(Host段) 
    <user username="magedu" password="1234" roles="manager-gui,admin-gui"/>

设置Host Manager和Manager App    重点:只对webapps对应的Host虚拟主机授权,即www.aaa.com。
    vim  webapps/manager/META-INF/context.xml
        allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192\.168\.\d+\.\d+" />
    vim  webapps/host-manager/META-INF/context.xml
        allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192\.168\.\d+\.\d+" />
        

说明:
1.tomcat-users.xml是全局的,manager和host-manage授权是针对本Host。
2.在conf/server.xml添加host段后, 如上面的<Host name="www.bbb.com",管理界面的没有应用程序的原因是:
    a.因为我们访问的地址是从www.aaa.comf进入,并没有从www.bbb.com进入。
    b.没有生成项目(wwwbbb.com或website)里的manager和host-manager文件。
    c.在manager和host-manage中要授权访问。
    

rolename:
manager-gui:   允许访问html接口(url路径为/manager/html/*)
manager-script:允许访问纯文本接口(url路径为/manager/text/*)
manager-jmx:   允许访问JMX代理接口(url路径为/manager/jmxproxy/*)
manager-status:允许访问Tomcat只读状态页面(url路径为/manager/status/*)
admin-gui:     允许访问host manager页面(url路径为/host-manager/html*)
admin-script:   允许访问host manager的脚本页面        

-------------------------------------------------------------------------------------------------------------------------------------


部署:将webapp的源文件放置到目标目录,通过web.xml和context.xml文件中配置的路径就可以访问该webapp,通过类加载器加载其特有的类和依赖的类到JVM上。
自动部署Auto Deploy:Tomcat发现多了这个应用就把它加载并启动起来
手动部署
    冷部署:将webapp放到指定目录,才去启动Tomcat
    热部署:Tomcat服务不停止,需要依赖manager、ant脚本、tcd(tomcat client deployer)等工具
反部署undeploy:停止webapp的运行,并从JVM上清除已经加载的类,从Tomcat应用目录中移 除部署的文件
启动start:        是webapp能够访问
停止stop:        webapp不能访问,不能提供服务,但是JVM并不清除它

 

posted @ 2022-08-05 17:37  yuanbangchen  阅读(747)  评论(0编辑  收藏  举报