Tomcat-配置文件解析
1、Tomcat-目录结构介绍
1.1、Tomcat主目录介绍
]# ll /usr/local/tomcat/ drwxr-x--- 2 root root 4096 May 3 14:13 bin # 主要包含启动和关闭tomcat脚本,以及依赖jar文件 drwx------ 3 root root 254 May 3 14:15 conf # tomcat配置文件目录 drwxr-x--- 2 root root 4096 May 3 14:13 lib # tomcat运行需要加载的jar包 drwxr-x--- 2 root root 197 May 3 14:15 logs # tomcat在运行过程中产生的日志文件#tomcat存放临时文件 drwxr-x--- 2 root root 30 May 3 14:13 temp # 临时文件存放位置 drwxr-x--- 7 root root 81 Apr 13 16:10 webapps # tomcat默认站点目录 drwxr-x--- 3 root root 22 May 3 14:15 work # tomcat运行时产生的缓存文件
1.2、【conf】目录介绍
【conf】目录主要是用来存放tomcat的一些配置文件。 server.xml可以设置端口号、设置域名或IP、默认加载的项目、请求编码 web.xml可以设置tomcat支持的文件类型 context.xml可以用来配置数据源之类的 tomcat-users.xml用来配置管理tomcat的用户与权限 在Catalina目录下可以设置默认加载的项目
2、server.xml 【Tomcat主配置文件解析】
]# cat /usr/local/tomcat/conf/server.xml <?xml version="1.0" encoding="UTF-8"?> <!-- server表示一个tocmat实例,通过8005远程调用可以关闭tomcat--> <Server port="8005" shutdown="SHUTDOWN"> <!-- 监听器 --> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <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> <!--base认证模块->所有站点都能使用 -> conf/tomcat-users.xmL文件定义--> <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> <!-- http连接器->处理请求与响应--> <Service name="Catalina"> <! --http连接器->处理请求与响应--> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxParameterCount="1000" /> <!-- 共享线程池--> <!-- <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxParameterCount="1000" /> --> <!-- 定义 SSL/TLS HTTP/1.1,证书格式:jks --> <!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" maxParameterCount="1000" > <SSLHostConfig> <Certificate certificateKeystoreFile="conf/localhost-rsa.jks" type="RSA" /> </SSLHostConfig> </Connector> --> <!-- 定义 SSL/TLS HTTP/1.1 证书格式:pem--> <!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="150" SSLEnabled="true" maxParameterCount="1000" > <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /> <SSLHostConfig> <Certificate certificateKeyFile="conf/localhost-rsa-key.pem" certificateFile="conf/localhost-rsa-cert.pem" certificateChainFile="conf/localhost-rsa-chain.pem" type="RSA" /> </SSLHostConfig> </Connector> --> < ! --ajp连接器 -> apache代理tomcat使用mod_jk需要该协议 --> <!-- <Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="8443" maxParameterCount="1000" /> --> <!-- Engine引擎 --> <Engine name="Catalina" defaultHost="localhost"> <!--多个tomcat配置相同Cluster进行session共享的一种解决方案 --> <!-- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> --> <!-- 调用认证配置,引入UserDatabase资源定义的用户名及密码进行base认证 --> <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>
3、server.xml 【Tomcat主配置文件【图解】】
3.1、请求流程图
3.2、Tomcat的HTTP请求过程
1、用户发出一个请求,如http://tomcat.cyc.com:8080/index.jsp 2、Connector发现是http/1.1协议,而且还是8080端口,于是就把请求接收后交给符合条件的Engine 3、Engine通过请求中的主机名tomcat.oldxu.com查找满足条件的虚拟主机(Host) 4、找到后就去此虚拟主机指定的appBase (代码存放的目录)最后将解析产生的结果返回给用户。
3.3、解析说明
一个server表示一个tomcat实例(当然也可以有多个实例)
一个server中包含多个Connector连接器,Connector的主要功能是接受、响应用户请求。
service的作用是∶将connector关联至engine(catalina引擎)
一个host就是一个站点,类似于nginx的多站点
context类似于nginx中location的概念