一、安装tomcat
上篇博文中我们学习了java的基础知识,知道了tomcat是web container,通过java语言开发所以必须运行在JDK上,所以我们先安装jdk
1、安装jdk
[root@BAIYU_179 src]# ls apache-tomcat-8.0.29.tar.gz jdk-8u65-linux-x64.tar.gz [root@BAIYU_179 src]# tar xf jdk-8u65-linux-x64.tar.gz -C /usr/local [root@BAIYU_179 src]# cd /usr/local/jdk1.8.0_65/ [root@BAIYU_179 jdk1.8.0_65]# ls bin db javafx-src.zip lib man release THIRDPARTYLICENSEREADME-JAVAFX.txt COPYRIGHT include jre LICENSE README.html src.zip THIRDPARTYLICENSEREADME.txt
2、添加环境变量
[root@BAIYU_179 jdk1.8.0_65]# vi /etc/profile.d/java.sh 1 export JAVA_HOME=/usr/local/jdk1.8.0_65 2 export PATH=$JAVA_HOME/bin:$PATH
3、测试jdk是否安装成功
[root@BAIYU_179 ~]# java -version java version "1.8.0_65" Java(TM) SE Runtime Environment (build 1.8.0_65-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
4、安装tomcat
[root@BAIYU_179 src]# tar xf apache-tomcat-8.0.29.tar.gz -C /usr/local [root@BAIYU_179 src]# cd /usr/local [root@BAIYU_179 local]# ll 总用量 48 drwxr-xr-x 9 root root 4096 11月 26 15:02 apache-tomcat-8.0.29 drwxr-xr-x. 2 root root 4096 9月 23 2011 bin drwxr-xr-x. 2 root root 4096 9月 23 2011 etc drwxr-xr-x. 2 root root 4096 9月 23 2011 games drwxr-xr-x. 2 root root 4096 9月 23 2011 include drwxr-xr-x 8 10 143 4096 10月 7 08:29 jdk1.8.0_65 drwxr-xr-x. 2 root root 4096 9月 23 2011 lib drwxr-xr-x. 2 root root 4096 9月 23 2011 lib64 drwxr-xr-x. 2 root root 4096 9月 23 2011 libexec drwxr-xr-x. 2 root root 4096 9月 23 2011 sbin drwxr-xr-x. 5 root root 4096 10月 27 16:37 share drwxr-xr-x. 2 root root 4096 9月 23 2011 src [root@BAIYU_179 local]# ln -sv apache-tomcat-8.0.29 tomcat "tomcat" -> "apache-tomcat-8.0.29" [root@BAIYU_179 local]# cd tomcat/ [root@BAIYU_179 tomcat]# ls bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work [root@BAIYU_179 tomcat]# ls bin/ bootstrap.jar daemon.sh startup.sh catalina.bat digest.bat tomcat-juli.jar catalina.sh digest.sh tomcat-native.tar.gz catalina-tasks.xml setclasspath.bat tool-wrapper.bat commons-daemon.jar setclasspath.sh tool-wrapper.sh commons-daemon-native.tar.gz shutdown.bat version.bat configtest.bat shutdown.sh version.sh configtest.sh startup.bat
5、添加环境变量
[root@BAIYU_179 ~]# vi /etc/profile.d/comcat.sh 1 export CATALINA_HOME=/usr/local/tomcat 2 export PATH=$CATALINA_HOME/bin:$PATH
6、测试tomcat是否安装成功
注意:tomcat是项目名称
catalina是程序名称,很多地方都保留了这个名字
[root@BAIYU_179 ~]# catalina.sh -h Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/jdk1.8.0_65 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Usage: catalina.sh ( commands ... ) commands: debug Start Catalina in a debugger debug -security Debug Catalina with a security manager jpda start Start Catalina under JPDA debugger run Start Catalina in the current window run -security Start in the current window with security manager start Start Catalina in a separate window start -security Start in a separate window with security manager stop Stop Catalina, waiting up to 5 seconds for the process to end stop n Stop Catalina, waiting up to n seconds for the process to end stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running configtest Run a basic syntax check on server.xml - check exit code for result version What version of tomcat are you running? Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined [root@BAIYU_179 ~]# catalina.sh start Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/jdk1.8.0_65 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. [root@BAIYU_179 ~]# netstat -nlptu Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 13387/java tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1078/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1166/master tcp 0 0 127.0.0.1:8005 0.0.0.0:* LISTEN 13387/java tcp 0 0 0.0.0.0:8009 0.0.0.0:* LISTEN 13387/java
二、Tomcat的目录结构
1、Tomcat的目录结构
[root@BAIYU_179 tomcat]
# ls
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
bin:脚本及启动时用到的类
lib:类库
conf:配置文件
logs:日志文件
webapps:应用程序默认部署目录
work:工作目录
temp:临时目录
2、配置文件
[root@BAIYU_179 tomcat]# ls conf Catalina catalina.properties logging.properties tomcat-users.xml web.xml catalina.policy context.xml server.xml tomcat-users.xsd
server.xml:主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息;
context.xml:每个webapp都可以有专用的配置文件,这些配置文件通常位于webapp应用程序目录下的WEB-INF目录中,用于定义会话管理器、JBC等,conf/contest.xml是为所有host的默认配置信息
web.xml:每个webapp部署之后才能被访问,此文件则用于为所有的webapp提供默认部署相关配置
遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息;
tomcat-users.xml:用户认证的帐号和密码配置文件,Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户指定角色等将通过编辑此文件实现;
catalina.policy:当使用-security选项启动tomcat实例时会读取此配置文件来实现安全运行策略,Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力;
catalina.properties:Java属性的定义文件,用于设定类加载器路径等,以及一些JVM相关的调优参数
Tomcat内部package的定义及访问相关的控制,也包括对通过类装载器装载的内容的控制;Tomcat在启动时会事先读取此文件的相关设置;
logging.properties:日志相关的配置信息
3、webapp的组织结构
tomcat自带有两个webapp(应用程序):
Manager:管理tomcat自身的应用
Host_manage:管理tomcat的虚拟主机
[root@BAIYU_179 tomcat]# ls webapps/ #网站根目录 docs examples host-manager manager ROOT #子应用程序 [root@BAIYU_179 tomcat]# ls webapps/host-manager/ images index.jsp manager.xml META-INF WEB-INF
有特定组织形式、层次型目录结构:主要包含了servlet代码文件,JSP页面文件、类文件、部署描述文件等信息(创建一个app必须要有这些文件,文件可以为空但一定要有)
/:webapp的根目录
index.jsp:wepapp主页
WEB-INF:当前webapp的私有资源目录,通常存放当前webapp自用的web.xml和context.xml
classes:此webapp的私有类 (tomcat自带的2个webapp没有私有类,没有该目录)
lib:此webapp的私有类,被打包为jar格式的类(tomcat自带的2个webapp没有私有类,没有该目录)
META-INF:私有资源目录(可选的)
手动添加测试应用程序:
1)创建特定目录结构:
[root@BAIYU_179 webapps]# pwd /usr/local/tomcat/webapps [root@BAIYU_179 webapps]# mkdir -pv testapp/{WEB-INF,lib,classes,META-INF} mkdir: 已创建目录 "testapp" mkdir: 已创建目录 "testapp/WEB-INF" mkdir: 已创建目录 "testapp/lib" mkdir: 已创建目录 "testapp/classes" mkdir: 已创建目录 "testapp/META-INF"
2)创建/usr/local/tomcat/webapps/testapp/index.jsp
[root@BAIYU_179 webapps]# cd testapp/ [root@BAIYU_179 testapp]# vi index.jsp #测试只有这个主页文件也可以访问的呀? 1 <%@ page language="java" %> 2 <%@ page import="java.util.*" %> 3 <html> 4 <head> 5 <title>JSP test page.</title> 6 </head> 7 <body> 8 <% out.println("Hello,world!"); %> 9 </body> 10 </html>
4、日志文件
[root@BAIYU_179 tomcat]# ls logs/ catalina.2015-11-26.log localhost.2015-11-26.log catalina.out localhost_access_log.2015-11-26.txt host-manager.2015-11-26.log manager.2015-11-26.log
localhost_access_log.2015-11-26.txt 访问日志
localhost.2015-11-26.log 错误和其它日志
manager.2015-11-26.log 管理日志
catalina.2015-11-26.log Tomcat启动或关闭日志文件
5、添加主机虚拟主机
1)创建新增的虚拟主机站点文件和目录
[root@BAIYU_179 tomcat]# mkdir -p /webapps/magedu/ROOT/{WEB-INF,classess,lib,META-INF} [root@BAIYU_179 tomcat]# vi /webapps/magedu/index.jsp 1 <%@ page language="java" %> 2 <%@ page import="java.util.*" %> 3 <html> 4 <head> 5 <title>JSP test page.</title> 6 </head> 7 <body> 8 <% out.println("Hello,magedu!"); %> 9 </body> 10 </html>
2)修改主配置文件
[root@BAIYU_179 tomcat]# vi conf/server.xml <Host name="www.magedu.com" appBase="/webapps/magedu" #添加一个Host段,定义一个虚拟主机 142 unpackWARs="true" autoDeploy="true"> 143 <Valve className="org.apache.catalina.valves.AccessLogValve" directory=" logs" #定义日志 144 prefix="magedu_access_log" suffix=".txt" 145 pattern="%h %l %u %t "%r" %s %b" /> 146 </host>
注意:如果自定义host及webapp路径,需要在Host指定的路径下创建ROOT来存放默认的站点文件;
三、Tomcat 配置文件详解
Tomcat的配置文件默认存放在$CATALINA_HOME/conf目录中,下面我们对常用的配置文件进行详解。
1.server.xml
Tomcat以面向对象的方式运行,它可以在运行时动态加载配置文件中定义的对象结构,这有点类似于apache的httpd模块的调用方式。server.xml中定义的每个主元素都会被创建为对象,并以某特定的层次结构将这些对象组织在一起。
server.xml文件中可定义的组件非常多,包括Server, Service, Connector, Engine, Cluster, Host, Alias, Context, Realm, Valve, Manager, Listener, Resources, Resource, ResourceEnvRef, ResourceLink, WatchedResource, GlobalNameingResources, Store, Transaction, Channel, Membership, Transport, Member, ClusterListener等。
下面简单介绍几个常用组件:
(1).Server组件
<Server port=”8005”
shutdown
=”SHUTDOWN”>
这会让Tomcat启动一个server实例(即一个JVM),它监听在8005端口以接收shutdown命令。各Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。这个端口的定义用于为管理员提供一个关闭此实例的便捷途径,因此,管理员可以直接telnet至此端口使用SHUTDOWN命令关闭此实例。不过,基于安全角度的考虑,这通常不允许远程进行,只监听在127.0.0.1。
Server的相关属性:
port: 接收shutdown指令的端口,默认仅允许通过本机访问,默认为8005;
shutdown:发往此Server用于实现关闭tomcat实例的命令字符串,默认为SHUTDOWN;
className: 用于实现此Server容器的完全限定类的名称,默认为org.apache.catalina.core.StandardServer;
(2).Service组件
Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收入站请求交将其转发至关联的引擎进行处理。因此,Service要包含一个引擎、一个或多个连接器。
如:
<Service name=”Catalina”>
这定义了一个名为Catalina的Service,此名字也会在产生相关的日志信息时记录在日志文件当中。
Service相关的属性:
className: 用于实现service的类名,一般都是org.apache.catalina.core.StandardService。
name:此服务的名称,默认为Catalina;
(3).Connector组件
进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类:
Tomcat作为应用程序服务器:请求来自于前端的web服务器,这可能是Apache, IIS, Nginx等;
Tomcat作为独立服务器:请求来自于web浏览器;
Tomcat应该考虑工作情形并为相应情形下的请求分别定义好需要的连接器才能正确接收来自于客户端的请求。一个引擎可以有一个或多个连接器,以适应多种请求方式。
定义连接器可以使用多种属性,有些属性也只适用于某特定的连接器类型。一般说来,常见于server.xml中的连接器类型通常有4种:
HTTP连接器
SSL连接器
AJP 1.3连接器
proxy连接器
如上面示例server.xml中定义的HTTP连接器:
<Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" redirectPort="8443"/>
定义连接器时可以配置的属性非常多,但通常定义HTTP连接器时必须定义的属性只有“port”,定义AJP连接器时必须定义的属性只有"protocol",因为默认的协议为HTTP。
以下为常用属性的说明:
address:指定连接器监听的地址,默认为所有地址,即0.0.0.0;
maxThreads:支持的最大并发连接数,默认为200;
port:监听的端口,默认为8080;
protocol:连接器使用的协议,默认为HTTP/1.1,定义AJP协议时通常为AJP/1.3;
redirectPort:如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口;
connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒,默认为60000,即1分钟;
enableLookups:是否通过request.getRemoteHost()进行DNS查询以获取客户端的主机名;默认为true;
acceptCount:设置等待队列的最大长度;通常在tomcat所有处理线程均处于繁忙状态时,新发来的请求将被放置于等待队列中;
下面是一个定义了多个属性的SSL连接器:
<Connector port="8443" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" acceptCount="100" debug="0" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" />
(4).Engine组件
Engine是Servlet处理器的一个实例,即servlet引擎,默认为定义在server.xml中的Catalina。Engine需要defaultHost属性来为其定义一个接收所有发往非明确定义虚拟主机的请求的host组件。
如:
<Engine name="Catalina" defaultHost="localhost">
常用的属性定义:
defaultHost:Tomcat支持基于FQDN的虚拟主机,这些虚拟主机可以通过在Engine容器中定义多个不同的Host组件来实现;但如果此引擎的连接器收到一个发往非非明确定义虚拟主机的请求时则需要将此请求发往一个默认的虚拟主机进行处理,因此,在Engine中定义的多个虚拟主机的主机名称中至少要有一个跟defaultHost定义的主机名称同名;
name:Engine组件的名称,用于日志和错误信息记录时区别不同的引擎;
注,Engine容器中可以包含Realm、Host、Listener和Valve子容器。
(5).Host组件
位于Engine容器中用于接收请求并进行相应处理的主机或虚拟主机,如前面默认配置文件中定义:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host>
常用属性说明:
appBase:此Host的webapps目录,即存放非归档的web应用程序的目录或归档后的WAR文件的目录路径;可以使用基于$CATALINA_HOME的相对路径;
autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true;
unpackWars:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true;
下面是虚拟主机定义示例:
<Engine name="Catalina" defaultHost="localhost"> <Host name="localhost" appBase="webapps"> <Context path="" docBase="ROOT"/> <Context path="/bbs" docBase="/web/bss" reloadable="true" crossContext="true"/> </Host> <Host name="mail.test.com" appBase="/web/mail"> <Context path="" docBase="ROOT"/> </Host> </Engine>
主机别名定义:
如果一个主机有两个或两个以上的主机名,额外的名称均可以以别名的形式进行定义,
如下:
<Host name="www.test.com" appBase="webapps" unpackWARs="true"> <Alias>test.com</Alias> </Host>
(6).Context组件
Context在某些意义上类似于apache中的路径别名,一个Context定义用于标识tomcat实例中的一个Web应用程序;如下面的定义:
<Context path="" docBase="/web/webapps"/> <!-- buzzin webapp --> <Context path="/bbs" docBase="/web/threads/bbs" reloadable="true"> </Context> <!-- chat server --> <Context path="/chat" docBase="/web/chat"/> <!-- darian web --> <Context path="/darian" docBase="darian"/>
在Tomcat中,每一个context定义也可以使用一个单独的XML文件进行,其文件的目录为$CATALINA_HOME/conf/<engine name>/<host name>。可以用于Context中的XML元素有Loader,Manager,Realm,Resources和WatchedResource。
常用的属性定义有:
docBase:Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;切记,docBase的路径名不能与相应的Host中appBase中定义的路径名有包含关系,比如,如果appBase为deploy,而docBase绝不能为deploy-bbs类的名字;
path: 访问路径,相对于Web服务器根路径而言的URI;如果为空“”,则表示为此webapp的根路径;如果context定义在一个单独的xml文件中,此属性不需要定义;
reloadable:是否允许重新加载此context相关的Web应用程序的类;默认为false;
注意:这里有两点很容易混淆
1、appBase和docbase
<Host name="www.xxj.com" appBase="/test" 132 unpackWARs="true" autoDeploy="true"> 133 <Context path="" docBase="/test/anyfish" reloadable="true"/> 134 <Context path="/sb" docBase="/test/sb" reloadable="true"/> 135 <Context path="/mage" docBase="/webapps/magedu" reloadable="true"/> 136 <Valve className="org.apache.catalina.valves.AccessLogValve" directory=" logs" 137 prefix="localhost_access_log" suffix=".txt" 138 pattern="%h %l %u %t "%r" %s %b" /> 139 140 </Host>
appbase 表示此虚拟主机下所有java应用的目录,该指令指定目录下的所有目录都会当作一个应用
例如上面/test路径下的所有目录都作为一个应用
docbase 表示一个应用的路径
区别: appbase设置与否其实关系不大,经测试可以设置为空,可以不设置,不设置时,默认会使用/usr/local/tomcat/webapps,此时能访问到/usr/local/tomcat/webapps目录下的资源,所有建议还是要设置。
docbase可以使用绝对路径,也可以使用相对路径,使用相对路径,根是docbase指定的目录,
appBase指定目录下的ROOT目录,访问时的url可以要该目录名
tomcat在找到host后然后继续找到context下docbase路径下的JSP文件,然后构造对象执行完,将值返回。
那么appbase的作用是什么呢?
因为jsp不像php直接将代码拷贝网站目录下就完事了,它往往是编译成一个war结尾的压缩包,然后将这个包放到网页目录下,这个appbase的作用就在这里,这个目录下的war包能自动解压自动部署,当然如果你只是把包放到appbase下,就算解压了,但是你没有配置docbase,依旧是不能从网页上访问的。
2、host和context区别
host表示一个虚拟主机 context表示虚拟主机下一个jsp的应用
sever.xml中每建立一个虚拟主机。都会在/usr/local/tomcat/conf/Catalina/新生成一个目录,
例如:
[root@BAIYU_179 Catalina]# ls /usr/local/tomcat/conf/Catalina/ localhost www.anyfish.com www.b.com www.magedu.com www.xxj.com
每个目录其实就表示一个虚拟主机,在这个目录下你可以建每个JSP应用的配置文件
也就是说你刚才在server.xml中配置的context这部分,可以放到这个里面自建,
例如在www.xxj.com目录下建立:
[root@BAIYU_179 Catalina]# vi www.xxj.com/a.xml 1 <Context path="/a" reloadable="true" docBase="/webapps/a" />
再创建站点文件和目录:
[root@BAIYU_179 Catalina]# cd /webapps [root@BAIYU_179 webapps]# ls b.com magedu sb [root@BAIYU_179 webapps]# mkdir a [root@BAIYU_179 webapps]# mv magedu/* a [root@BAIYU_179 webapps]# vi a/index.jsp 1 <%@ page language="java" %> 2 <%@ page import="java.util.*" %> 3 <html> 4 <head> 5 <title>JSP test page.</title> 6 </head> 7 <body> 8 <% out.println("aaaaaaaa!"); %> 9 </body> 10 </html>
再从浏览器访问http://www.xxj.com:8080/a
(7).Realm组件
一个Realm表示一个安全上下文,它是一个授权访问某个给定Context的用户列表和某用户所允许切换的角色相关定义的列表。因此,Realm就像是一个用户和组相关的数据库。定义Realm时惟一必须要提供的属性是classname,它是Realm的多个不同实现,用于表示此Realm认证的用户及角色等认证信息的存放位置。
JAASRealm:基于Java Authintication and Authorization Service实现用户认证;
JDBCRealm:通过JDBC访问某关系型数据库表实现用户认证;
JNDIRealm:基于JNDI使用目录服务实现认证信息的获取;
MemoryRealm:查找tomcat-user.xml文件实现用户信息的获取;
UserDatabaseRealm:基于UserDatabase文件(通常是tomcat-user.xml)实现用户认证,它实现是一个完全可更新和持久有效的MemoryRealm,因此能够跟标准的MemoryRealm兼容;它通过JNDI实现;
四、部署appweb
1、webapp归档格式
.war:web应用程序
.jar:EJB的类
.rar:资源适配器
.ear:企业级应用程序
2、部署(deployment)web的相关操作
deploy:部署,将webapp的源文件放置于目标目录、配置tomcat服务器能够基于context定义的路径来访问此appweb,并将其持有类通过class loader装载至tomcat实现
redeploy:重新部署
undeploy:反部署,停止webapp,并从tomcat实例拆除其部分文件和部署名
stop:停止
start:启动处于停止状态的webapp
3、部署的方式
冷部署:在tomcat启动之前进行部署
热部署:在不停止tomcat的前提下进行部署,使用部署工具进行:manager,ant脚本,tcd(tomcat client deployer)
五、tomcat自带图形管理接口
manager 管理应用程序的部署及监控
host-manager 虚拟主机的管理
我们先来看一下默认的图形配置界面,
注,大家注意看右上角,我用红色方框标记出来的,大家可以看有三个按钮,分别为
Server Status 主要用来查看服务器的状态
Manager App 主要用来管理应用程序的部署及监控
Host Manager 主要用来管理虚拟主机
下面我们就来具休的配置一下,大家可以看到,你点击任何一个按钮都要输入用户名和密码的,在我们配置之前我们先来说一下,Tomcat的Manager功能,
Manager的四个管理角色:
manager-gui - allows access to the HTML GUI and the status pages
manager-script - allows access to the text interface and the status pages
manager-jmx - allows access to the JMX proxy and the status pages
manager-status - allows access to the status pages only
下面我们就来启用manager功能:
1、用户授权
注:先添加角色再添加用户和密码
[root@BAIYU_179 tomcat]# ls conf/ Catalina context.xml server.xml.orig tomcat-users.xsd catalina.policy logging.properties tomcat-users.xml web.xml catalina.properties server.xml tomcat-users.xml.orig [root@BAIYU_179 tomcat]# vi conf/tomcat-users.xml #在<tomcat-users段中添加这2行: <role rolename="manager-gui"/> <role rolename="admin-gui"/> <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
重启tomcat,再从浏览器访问
2、Server Status
点击Server Status按钮,输入用户名和密码,我这里全部设置是tomcat
然后,会出现以下界面,显示全部服务器运行状态:
1)可以看到内存池的分布状态:
堆内存被分为3个部分:一等区,存活区,老年带
非堆内存:code cache,持久带
2)连接器状态
ajp连接器
http连接器
3、Manager App
下面是应用程序部署管理界面:
可以在这个界面点击按钮安装应用的启动,停止,部署,反部署,热部署和相关的设置
4、Host Manager
下面是虚拟主机管理页面,
注,我们一般在生产环境中用的最多是应用程序部署界面,可以进行热布署应用程序,很方便。
六、反向代理方式使用Tomcat服务器
在实际生产环境中tomcat更多应用于后端动态web服务器,前端通过nginx或apache代理
1、Nginx + Tomcat
client-->nginx-->reverse proxy-->tomcat(http connector)
1)安装nginx
这里为了省事就直接使用Yum安装nginx了
[root@BAIYU_179 ~]# yum install nginx -y
2)修改nginx配置文件添加代理至后端tomcat,并添加.jsp格式的主页
[root@BAIYU_179 ~]# cd /etc/nginx/conf.d/ [root@BAIYU_179 conf.d]# ls default.conf ssl.conf virtual.conf [root@BAIYU_179 conf.d]# vi default.conf location / { #此时所有的请求都被代理至后端的tomcat 16 # root /usr/share/nginx/html; 17 proxy_pass http://192.168.100.179:8080; 18 index index.jsp index.html index.htm; 19 } [root@BAIYU_179 conf.d]# service nginx reload 重新载入 nginx:[确定]
再从浏览器访问:
3)nginx与tomcat动静分离
[root@BAIYU_179 conf.d]# vi default.conf location / { 16 root /usr/share/nginx/html; 17 #proxy_pass http://192.168.100.179:8080; 18 index index.jsp index.html index.htm; 19 } 20 location ~* \.(jsp|do) { 21 proxy_pass http://192.168.100.179:8080; 22 }
注意:此时访问只有后端带.jsp的url才会被代理至后端的tomcat,其它内容都有nginx提供,
此时发现图片内容无法显示,因为我们做了动静分离图片应该由nginx提供,但nginx目录下没有图片,所以这里显示不出来,所以,做动静分离时注意,资源的存放目录
2、Apache + Tomcat
clien-->httpd-->reverse proxy-->tomcat(http connector,ajp connector)
两种连接器:
http connector(默认):
ajp connector:二进制格式,带宽利用率、效率更高
httpd做反向代理时需要mod_proxy模块,并关闭正向代理
mod_proxy_http
mod_proxy_ajp
1)安装httpd
[root@BAIYU_179 conf.d]# service nginx stop 停止 nginx:[确定] [root@BAIYU_179 conf.d]# yum install httpd #yum安装的Httpd默认安装了上面所提到的3个模块
2)http connector示例
修改httpd的配置文件
[root@BAIYU_179 ~]# cd /etc/httpd/ [root@BAIYU_179 httpd]# ls conf conf.d logs modules run [root@BAIYU_179 conf.d]# vi http-tomcat.conf #添加此文件 1 NameVirtuaLHost *:80 #启用基于名称的虚拟主机 2 <VirtuaLHost *:80> 3 ServerName 4 ProxyVia on #自动添加Via首部 5 ProxyRequests off #关闭正向代理 6 ProxypreserveHost ON #代理支持基于主机名的虚拟主机 7 <Proxy *> #代理服务授权 8 Order deny,allow 9 allow from all 10 </Proxy> 11 ProxyPass /status ! #给路径不反向代理 12 ProxyPass / #代理 13 ProxyPassReverse / #响应时路径映射 14 <Location /> #授权,非必须 15 Order deny,allow 16 allow from all 17 </Location> 18 </virtuaLHOST> [root@BAIYU_179 conf.d]# service httpd configtest httpd: apr_sockaddr_info_get() failed for BAIYU_179 httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName Syntax OK [root@BAIYU_179 conf.d]# service httpd start 正在启动 httpd:httpd: apr_sockaddr_info_get() failed for BAIYU_179 httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName [确定] [root@BAIYU_179 conf.d]# service httpd reload 重新载入 httpd:
注意:apache+tomcat时,一般apache只做代理不提供静态web服务,在前面在加一个nginx做代理和静态web
3)ajp connector示例
[root@BAIYU_179 conf.d]# ls http-tomcat.conf http-tomcat.conf.orig README welcome.conf [root@BAIYU_179 conf.d]# cp http-tomcat.conf http-tomcat.bak [root@BAIYU_179 conf.d]# mv http-tomcat.conf ajp-tomcat.conf [root@BAIYU_179 conf.d]# vi ajp-tomcat.conf 1 NameVirtuaLHost *:80 2 <VirtuaLHost *:80> 3 ServerName www.a.com 4 ProxyVia on 5 ProxyRequests off 6 ProxypreserveHost ON 7 <Proxy *> 8 Order deny,allow 9 allow from all 10 </Proxy> 11 ProxyPass /status ! 12 ProxyPass / ajp://192.168.100.179:8009/ #只要修改协议和端口即可 13 ProxyPassReverse / ajp://1792.168.100.179:8009/ 14 <Location /> 15 Order deny,allow 16 allow from all 17 </Location> 18 </virtuaLHOST>