tomcat全攻略
1.tomcat是什么?
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,它早期的名称为catalina,后来由Apache、Sun 和其他一些公司及个人共同开发而成,并更名为Tomcat。Tomcat是应用(java)服务器,它是一个servlet容器,是Apache的扩展,但它是独立运行的。tomat应用于Java Servlet, JavaServer Pages,Java Expression Language以及其他的Javaweb开发的技术。
The Apache Tomcat software is an open source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket technologies. The Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket specifications are developed under the Java Community Process.The Apache Tomcat software is developed in an open and participatory environment and released under the Apache License version 2. The Apache Tomcat project is intended to be a collaboration of the best-of-breed developers from around the world. We invite you to participate in this open development project. To learn more about getting involved, click here.
Apache Tomcat software powers numerous large-scale, mission-critical web applications across a diverse range of industries and organizations. Some of these users and their stories are listed on the PoweredBy wiki page.
Apache Tomcat, Tomcat, Apache, the Apache feather, and the Apache Tomcat project logo are trademarks of the Apache Software Foundation.
--from http://tomcat.apache.org/
2.tomcat yum安装
1.yum安装jdk
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
2.yum安装tomcat
yum install -y tomcat, tomcat-lib, tomcat-admin-webapps, tomcat-webapps, tomcat-docs-webapp
3.tomcat rpm包程序环境
1.查看程序环境方式
rpm -ql tomcat
2.环境介绍
配置文件目录:/etc/tomcat
主配置文件:server.xml
webapps存放位置:/var/lib/tomcat/webapps/
examples
manager
host-manager
docs
Unit File:tomcat.service
环境配置文件:/etc/sysconfig/tomcat
4.tomcat配置文件构成
server.xml:主配置文件;
web.xml:每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF目录中;web.xml文件为所有的webapps提供默认部署相关的配置;
context.xml:每个webapp都可以专用的配置文件,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF目录中;context.xml文件为所有的webapps提供默认配置;
tomcat-users.xml:用户认证的账号和密码文件;
catalina.policy:当使用-security选项启动tomcat时,用于为tomcat设置安全策略;
catalina.properties:Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数;
logging.properties:日志系统相关的配置;
5.Tomcat的核心组件:server.xml
<Server> <Service> <connector/> <connector/> ... <Engine> <Host> <Context/> <Context/> ... </Host> <Host> ... </Host> ... Engine> </Service> </Server>
每一个组件都由一个Java“类”实现,这些组件大体可分为以下几个类型:
顶级组件:Server
服务类组件:Service
连接器组件:http, https, ajp(apache jserv protocol)
容器类:Engine, Host, Context
被嵌套类:valve, logger, realm, loader, manager, ...
集群类组件:listener, cluster, ...
6.JSP WebAPP介绍
tomcat能够运行JSP WebAPP。现在主流大型的web电商web服务都是用JSP开发的。下面介绍JSP WebAPP。
6.1 JSP WebAPP的组织结构
/: webapps的根目录
index.jsp:主页;
WEB-INF/:当前webapp的私有资源路径;通常用于存储当前webapp的web.xml和context.xml配置文件;
META-INF/:类似于WEB-INF/;
classes/:类文件,当前webapp所提供的类;
lib/:类文件,当前webapp所提供的类,被打包为jar格式;
6.2 webapp归档格式
.war:webapp
.jar:EJB的类打包文件;
.rar:资源适配器类打包文件;
.ear:企业级webapp;
6.3 部署(deploy)webapp的相关操作:
deploy:将webapp的源文件放置于目标目录(网页程序文件存放目录),配置tomcat服务器能够基于web.xml和context.xml文件中定义的路径来访问此webapp;将其特有的类和依赖的类通过class loader装载至JVM;
部署有两种方式:
1.自动部署:auto deploy
2.手动部署:
2.1 冷部署:把webapp复制到指定的位置(rpm安装的tomcat在/var/lib/tomcat/webapps),而后才启动tomcat;
2.2 热部署:在不停止tomcat的前提下进行部署;
热部署的部署工具有:manager、ant脚本、tcd(tomcat client deployer)等;
undeploy:反部署,停止webapp,并从tomcat实例上卸载webapp;
start:启动处于停止状态的webapp;
stop:停止webapp,不再向用户提供服务;其类依然在jvm上;
redeploy:重新部署;
6.4 手动提供一测试类应用,并冷部署:
mkidr -pv /usr/local/tomcat/webapps/test/{classes,lib,WEB-INF} #创建JSP WebAPP相关的目录以及文件 vi /usr/local/tomcat/webapps/test/index.jsp #手动创建一个WebAPP应用 <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>Test Page</title> </head> <body> <% out.println("hello world"); %> </body> </html>
6.4.1 通过浏览器访问测试
7.Tomcat的常用组件配置
7.1 Server
代表tomcat instance,即表现出的一个java进程;监听在8005端口,只接收“SHUTDOWN”。各server监听的端口不能相同,因此,在同一物理主机启动多个实例时,需要修改其监听端口为不同的端口;
7.2 Service
用于实现将一个或多个connector组件关联至一个engine组件;
7.3 Connector组件
负责接收请求,常见的有三类http/https/ajp;
进入tomcat的请求可分为两类:
(1) standalone : 请求来自于客户端浏览器;
(2) 由其它的web server反代:来自前端的反代服务器,以下提供四种情况
nginx --> http connector --> tomcat httpd(proxy_http_module) --> http connector --> tomcat httpd(proxy_ajp_module) --> ajp connector --> tomcat httpd(mod_jk) --> ajp connector --> tomcat
Connector属性:
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
address:监听的IP地址;默认为本机所有可用地址;
maxThreads:最大并发连接数,默认为200;
enableLookups:是否启用DNS查询功能;
acceptCount:等待队列的最大长度;
secure:安全相关
sslProtocol:ssl安全协议
7.4 Engine组件
Servlet实例,即servlet引擎,其内部可以一个或多个host组件来定义站点; 通常需要通过defaultHost来定义默认的虚拟主机;
属性:
name=
defaultHost="localhost"
jvmRoute=
7.5 Host组件
位于engine内部用于接收请求并进行相应处理的主机或虚拟主机,示例:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> </Host>
常用属性说明:
(1) appBase:此Host的webapps的默认存放目录,指存放非归档的web应用程序的目录或归档的WAR文件目录路径;可以使用基于$CATALINA_BASE变量所定义的路径的相对路径;
(2) autoDeploy:在Tomcat处于运行状态时,将某webapp放置于appBase所定义的目录中时,是否自动将其部署至tomcat;
示例1:
<Host name="www.huwho.cn" appBase="/appdata/huwho" unpackWARs="true" autoDeploy="true"> </Host>
mkdir -pv /appdata/huwho #创建webapps的存放目录 mkdir -pv /appdata/huwho/ROOT/{lib,classes,WEB-INF} #创建webapp的相关文件 vi /appdata/huwho/ROOT/index.jsp #提供一个测试页即可 <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>Test Page</title> </head> <body> <% out.println("tomcat server node1"); %> </body> </html>
通过浏览器访问测试:
示例2:JSP WebAPP部署应用
注:在示例1实验的基础上进行此实验,确保目录在/appdata/huwho,进行如下操作
下载此压缩包:shopxx-a5-Beta.zip
解压:unzip shopxx-a5-Beta.zip
创建软链接:ln -sv shop shopxx-v3.0-Beta
浏览器访问测试
7.6 Context组件
Context组件是最内层次的组件,它表示Web应用程序本身。配置一个Context最主要的是指定Web应用程序的根目录,以便Servlet容器能够将用户请求发往正确的位置。
官方示例:
<Context path="/PATH" docBase="/PATH/TO/SOMEDIR" reloadable=""/>
在上面实验的基础上加入context组件内容
vi /etc/tomcat/server.xml <Host name="www.huwho.cn" appBase="/appdata/huwho" unpackWARs="true" autoDeploy="true"> <Context path="/e-shop" docBase="/e-shop/eshop" reloadable="true"/> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="huwho_access_log." suffix=".log" pattern="%h %l %u %t "%r" %s %b" /> </Host>
mkdir -pv /e-shop cd /e-shop mv shopxx-v3.0-Beta /e-shop/ ln -sv eshop shopxx-v3.0-Beta
浏览器访问测试
7.7 Valve组件
用来拦截请求并在将其转至目标之前进行某种处理操作,类似于Servlet规范中定义的过滤器。
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
Valve存在多种类型:
定义访问日志:
org.apache.catalina.valves.AccessLogValve
定义访问控制:
org.apache.catalina.valves.RemoteAddrValve <Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="172\.16\.100\.67"/>
8.Tomcat的两个管理应用
Tomcat有它自己的管理应用,我们只需要经过简单的配置就可以启用它。
一个是manager,另一个是host-manager。
vi tomcat-users.xml #配置文件中加入以下三行开启tomcat管理应用 <role rolename="admin-gui"/> <role rolename="manager-gui"/> <user username="tomcat" password="123456" roles="manager-gui,admin-gui"/>
配置好了,让我们通过浏览器访问瞧瞧。点击图中标识的位置,就可以进入管理中心了。
提示输入账号以及密码。根据配置文件自己配置的账号密码,输入即可。
查看管理页面
9.Tomcat集群部署
9.1 nt(nginx+tomcat)
1.nginx反向代理Tomcat示例
server { server_name www.huwho.cn; listen 80; location / { proxy_pass http://192.168.0.13:8080; } location ~* \.(jsp|do) { proxy_pass http://192.168.0.13:8080; }
打开浏览器测试,nginx代理成功
2.nginx负载均衡反向代理Tomcat示例
vi /etc/nginx/nginx.conf #http{}段中加入如下内容 upstream tcsrvs { #hash $request_uri consistent; server 192.168.0.13:8080; server 192.168.0.14:8080; } vi /etc/nginx/conf.d/huwho.conf server { server_name www.huwho.com; listen 80; location / { proxy_pass http://tcsrvs; } }
打开浏览器测试,web页面正常访问,且能访问两台Tomat主机
9.2 at(httpd+tomcat)
1.httpd反向代理Tomat示例
vi /etc/httpd/conf.d/huwho.conf <VirtualHost *:80> ServerName www.huwho.cn ProxyRequests Off ProxyVia On ProxyPreserveHost On <Proxy *> Require all granted </Proxy> ProxyPass / http://192.168.0.13:8080/ ProxyPassReverse / http://192.168.0.13:8080/ <Location /> Require all granted </Location> </VirtualHost>
2.proxy_http_module代理配置示例(代理+负载均衡)
cat httpd-tomcat.huwho.conf <Proxy balancer://tcsrvs> BalancerMember http://192.168.0.13:8080 loadfactor=1 BalancerMember http://192.168.0.14:8080 loadfactor=2 ProxySet lbmethod=byrequests </Proxy> <VirtualHost *:80> ServerName www.huwho.cn ProxyRequests Off ProxyVia On ProxyPreserveHost On <Proxy *> Require all granted </Proxy> ProxyPass / balancer://tcsrvs/ ProxyPassReverse / balancer://tcsrvs/ <Location /> Require all granted </Location> <Location /balancer-manager> SetHandler balancer-manager ProxyPass ! Require ip 10.0.0.1 </Location> </VirtualHost>
打开浏览器测试,web页面正常访问,且能访问两台Tomat主机
3. proxy_ajp_module代理配置示例(代理+负载均衡)
[[email protected] conf.d]# cat http-ajp-huwho.conf <Proxy balancer://ajsrvs> BalancerMember ajp://192.168.0.13:8009 BalancerMember ajp://192.168.0.14:8009 ProxySet lbmethod=byrequests </Proxy> <VirtualHost *:80> ServerName ajp.huwho.cn ProxyRequests Off ProxyVia On ProxyPreserveHost On <Proxy *> Require all granted </Proxy> ProxyPass / balancer://ajsrvs/ ProxyPassReverse / balancer://ajsrvs/ <Location /> Require all granted </Location> </VirtualHost>
打开浏览器测试,web页面正常访问,且能访问两台Tomat主机