tomcat配置文件

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
目录和配置文件相关说明
 
目录结构
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定义应用程序单独的路径映射和配置

  

  

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
客户端请求过程:       
    浏览器端的请求被发送到服务端端口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 @   yuanbangchen  阅读(764)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示