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 "%r" %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 "%r" %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并不清除它
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)