Tomcat:
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,运行jsp和servlet,使用HTTP与客户端(通常是浏览器)进行通信。Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选,因为Tomcat 技术先进、性能稳定,成为目前比较流行的Web 应用服务器。Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展,但它是独立运行的
编程语言:
硬件级:微码编程,汇编语言
系统级:C,C++,…
应用级:Java, PHP, Python, Ruby, Perl, C#, …
程序:指令+数据
过程式编程:以指令为中心,数据服务于代码;
对象式编程:以数据为中心,指令服务于数据;
对象,方法(method)
Tomcat的架构:
Tomcat 6支持Servlet 2.5和JSP 2.1的规范,它由一组嵌套的层次和组件组成,一般可分为以下四类:
顶级组件:位于配置层次的顶级,并且彼此间有着严格的对应关系;
连接器:连接客户端(可以是浏览器或Web服务器)请求至Servlet容器,
容器:包含一组其它组件;
被嵌套的组件:位于一个容器当中,但不能包含其它组件;
各常见组件:
1、服务器(server):Tomcat的一个实例,通常一个JVM只能包含一个Tomcat实例;因此,一台物理服务器上可以在启动多个JVM的情况下在每一个JVM中启动一个Tomcat实例,每个实例分属于一个独立的管理端口。这是一个顶级组件。
2、服务(service):一个服务组件通常包含一个引擎和与此引擎相关联的一个或多个连接器。给服务命名可以方便管理员在日志文件中识别不同服务产生的日志。一个server可以包含多个service组件,但通常情下只为一个service指派一个server。
连接器类组件:
3、连接器(connectors):负责连接客户端(可以是浏览器或Web服务器)请求至Servlet容器内的Web应用程序,通常指的是接收客户发来请求的位置及服务器端分配的端口。默认端口通常是HTTP协议的8080,管理员也可以根据自己的需要改变此端口。一个引擎可以配置多个连接器,但这些连接器必须使用不同的端口。默认的连接器是基于HTTP/1.1的Coyote。同时,Tomcat也支持AJP、JServ和JK2连接器。
容器类组件:
4、引擎(Engine):引擎通是指处理请求的Servlet引擎组件,即Catalina Servlet引擎,它检查每一个请求的HTTP首部信息以辨别此请求应该发往哪个host或context,并将请求处理后的结果返回的相应的客户端。严格意义上来说,容器不必非得通过引擎来实现,它也可以是只是一个容器。如果Tomcat被配置成为独立服务器,默认引擎就是已经定义好的引擎。而如果Tomcat被配置为Apache Web服务器的提供Servlet功能的后端,默认引擎将被忽略,因为Web服务器自身就能确定将用户请求发往何处。一个引擎可以包含多个host组件。
5、主机(Host):主机组件类似于Apache中的虚拟主机,但在Tomcat中只支持基于FQDN的“虚拟主机”。一个引擎至少要包含一个主机组件。
6、上下文(Context):Context组件是最内层次的组件,它表示Web应用程序本身。配置一个Context最主要的是指定Web应用程序的根目录,以便Servlet容器能够将用户请求发往正确的位置。Context组件也可包含自定义的错误页,以实现在用户访问发生错误时提供友好的提示信息。
要想实现nginx对tomcat的反代,就只能使用http的tomcat。
要想实现httpd对tomcat的反代,可以使用http的tomcat和ajp的tomcat。(ajp:apache jserv protocol)
实现tomcat的安装:
tomcat是使用Java语言编写的程序,其运行的代码也是Java编写的,所以实现tomcat的应用需要在Java的虚拟机上运行。所以需要安装另一个软件:JDK
安装的方式分为两种:yum直接安装。下载最新版的rmp包来安装。
1 .yum安装的详细 步骤:
yum install java-1.8.0-openjdk-deve (安装jdk.;openjdk是开源的软件,不是oracle公司的jdk;类似于MySQL和mariad之间的关系。)
yum install tomcat tomcat-admin-webapps (安装tomcat )
systemctl start tomcat (开启tomcat服务)
在浏览器上打开tomcat的主页面:http://192.168.60.20:8080/ (如果服务起来后就会看到tomcat的文档页面,因为安装时安装了文档tomcat-docs-webapp)
2 .官网下载包安装:
JDK下载的官网
http://www.oracle.com/technetwork/java/javase/downloads/jdk-netbeans-jsp-142931.html
上传到Linux系统中:
rpm -ivh jdk-8u144-linux-x64.rpm (rmp安装)
安装目录:/usr/java/
运行程序目录:ls /usr/java/latest/bin/
vim /etc/profile.d/java.sh (创建新文件,将jdk的程序目录加入到环境变量里去。)
export JAVA_HOME=/usr/java/latest/
export PATH=$JAVA_HOME/bin:$PATH
. /etc/profile.d/java.sh (让文件生效)
java -version (查看安装Java的版本信息)
安装tomcat:
https://tomcat.apache.org/download-80.cgi?Preferred=http%3A%2F%2Fmirrors.hust.edu.cn%2Fapache%2F (tomcat下载的官网)
tar xvf apache-tomcat-8.5.32.tar.gz -C /usr/local/ (将下载下来的tar包解压)
cd /usr/local/ (进入此目录下)
ln -sv apache-tomcat-8.5.32 tomcat (创建软连接)
useradd tomcat (创建tomcat用户作为运行tomcat程序的用户)
chown -R :tomcat ./* (改变tomcat文件夹下的文件属组)
chown -R tomcat logs/ temp/ work/ (将这三个文件的所有者改为tomcat所有)
chmod g+rw logs/
chmod g+rw logs/*(给tomcat的 日志文件添加组的读和执行的权限,当在切换到tomcat用户时可以开启tomcat服务)
chmod g+rx conf/
chmod g+rx conf/* (给tomcat的配置文件添加组的读和执行的权限,当在切换到tomcat用户时可以开启tomcat服务)
vim /etc/profile.d/tomcat.sh (创建文件将tomcat的程序加入到环境变量当中去)
export CATALINA_BASE=/usr/local/tomcat
export PATH=$CATALINA_BASE/bin/:$PATH
. /etc/profile.d/tomcat.sh (让此配置文件生效)
/usr/local/tomcat/bin/下有个启动tomcat的脚本:catalina.sh
catalina.sh start (启动tomcat服务)
catalina.sh stop (停止服务)
catalina.sh –help (可以查看其他的命令)
或者切换到tomcat用户 在开启服务,这样比较安全。
su -tomcat
catalina.sh start (启动服务)
tomcat的配置信息:
端口号:
8080:主端口号
8005:本地管理端口号
8009:ajp的编辑器
tomcat的主页面:
/usr/local/tomcat/webapps/ROOT/(自己安装rpm包的路径)
/usr/share/tomcat/webapps/ROOT/ (使用yum安装的默认路径)
创建主页面index.jsp (必须是以jsp为结尾的文件)
如果是自己定义的主页面目录也必须是在大写的ROOT文件夹下
tomcat的目录结构 (对于自己安装的rpm包;/usr/local/tomcat/)
bin:脚本,及启动时用到的类;
conf:配置文件目录;
lib:库文件,Java类库,jar;
logs:日志文件目录;
temp:临时文件目录;
webapps:webapp的默认目录;
work:工作目录,存放编译后的字节码文件;
yum安装的程序环境各配置文件:
主配置配置文件目录:/etc/tomcat/
主配置文件:server.xml
webapps存放位置:/var/lib/tomcat/webapps/——>/usr/share/tomcat/webapps/ (链接的两个路径)
http://192.168.60.20:8080
打开浏览器系统默认的会显示/var/lib/tomcat/webapps/ROOT/index.jsp的文件主页面
如果在/var/lib/tomcat/webapps/下创建一个静态的文件夹存放静态的文件:echo ttt > /var/lib/tomcat/webapps/hh/index.html
只有主页面路径必须要放在ROOT/下如果是自己创建的资源文件只需要放在/var/lib/tomcat/webapps/下就可以了。
http://192.168.60.20:8080/hh/(就会显示创建的静态页面资源)
examples
manager
host-manager
docs
Unit File:tomcat.service
环境配置文件:/etc/sysconfig/tomcat
/etc/tomcat/tomcat.conf 或者/etc/sysconfig/tomcat:用于定义tomcat系统资源的配置文件。
tomcat的配置文件构成:vim /etc/tomcat/server.xml
server.xml:主配置文件的内容详解:
web.xml:每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置;
context.xml:每个webapp都可以使用的配置文件,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认配置;
tomcat-users.xml:用户认证的账号和密码文件;角色(role),用户(User);此文件在tomcat启动时被装入内存;
catalina.policy:当使用-security选项启动tomcat时,用于为tomcat设置安全策略;
catalina.properties:Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数;
logging.properties:日志系统相关的配置;
每一个组件都由一个Java“类”实现,这些组件大体可分为以下几个类型:
顶级组件:Server
服务类组件:Service
连接器组件:http, https, ajp(apache jserv protocol)
容器类:Engine, Host, Context
被嵌套类:valve, logger, realm, loader, manager, …
集群类组件:listener, cluster, …
webapp归档格式:(在实际工作当中,当程序员将成千上万的jsp格式的文件,要一个个的传输过来则非常的慢。所以就需要文件的归档)
.war:webapp; (如果从程序员那里得到的是.war格式的文件,则直接放在主页面目录下就可以了,系统会自动展开的)
.jar:EJB的类打包文件(类库);
.rar:资源适配器类打包文件;
.ear:企业级webapp;
…
管理接口
<Server port=”8005″ shutdown=”SHUTDOWN”>(8005默认监听在本机的IP地址;SHUTDOWN:可以关闭tomcat)
yum install telnet(安装包)
telnet 127.0.0.1 8005 (连接本机的8005 端口)
输入 SHUTDOWN 就可以将本机的tomcat关闭了。为了安全可以将SHUTDOWN改为其他的字符。
连接器及协议:
<Connector port=”8080″ protocol=”HTTP/1.1″ (http的连接器及协议)
connectionTimeout=”20000″ (连接延时时间:单位是毫秒)
<Connector port=”8009″ protocol=”AJP/1.3″ redirectPort=”8443″ /> (Java的连接器及协议)
<Engine name=”Catalina” defaultHost=”localhost”> (默认tomcat的主机名称及默认的IP地址)
(如果创建了多个虚拟tomcat的主机;想要其中的某一个作为默认的主机,可以在此更改)
<Host name=”localhost” appBase=”webapps” (主机名和网页的根目录)
unpackWARs=”true” autoDeploy=”true”> (本机默认的主机及配置:unpackWARs:是否自动展开war文件;autoDeploy:是否自动部署新添加的应用程序)
部署(deploy)webapp的相关操作:(将应用程序文件和其依赖的类资源都放到主页面路径里)
部署有两种方式:
自动部署:auto deploy
手动部署:
冷部署:把webapp复制到指定的位置,而后才启动tomcat;
热部署:在不停止tomcat的前提下进行部署;(支持热部署)
部署工具:manager、ant脚本、tcd(tomcat client deployer)等
undeploy:拆除(反部署),停止webapp,并从tomcat实例上卸载webapp;
start:启动处于停止状态的webapp;
stop:停止webapp,不再向用户提供服务;其类依然在jvm上;
redeploy:重新
示例:部署一个资源文件:
在/data/test/下创建一个.jsp结尾的文件
vim /data/test/index.jsp
<%@ page language=”java” %>
<%@ page import=”java.util.*” %>
<html>
<head>
<title>Test Page</title>
</head>
<body>
<% out.println(“hello world”);
%>
</body>
</html> (Java格式的helloword编程)
然后将此资源目录test整个复制到/usr/share/tomcat/webapps/文件下就可以了,如果有其他的类文件都将其放进test目录下就可以了,整个过程是热部署。不需要将tomcat停止服务
最后访问http://192.168.60.22/test/(就可以访问到刚才部署的新的资源文件了)
/usr/share/tomcat/work/Catalina/localhost/test/org/apache/jsp/index_jsp.java 查看此目录下会生成index_jsp.java此文件;此文件为运行刚才创建的测试文件时,将测试文件转换为全Java代码的文件。
里面还会生成一个解码的类文件index_jsp.class
在实际当中部署会有版本号的,所以要创建软连接的方式:
首先将test1.1——>test: ln -sv test1.1 test
然后又有test1.2的版本需要发布需要将:test1.2——->test :rm test (删除旧的链接,建立新的链接)
ln -s test1.2 test
test 是个不存在的文件夹只提供软连接的。
tomcat的两个管理应用:(图形化管理界面)
manager (管理tomcat主机上的应用资源程序的)
host-manager (管理多个tomcat虚拟主机)
(注意:不要将这两个应用开放到互联网上;因为是管理tomcat虚拟机的)
vim /etc/tomcat/tomcat-users.xml (编辑配置文件添加用户和密码使其能够登陆到管理界面上去)
systemctl restart tomcat (重新开启tomcat服务)
http://192.168.60.20:8080/manager/ (在浏览器上打开管理界面)
可以显示当前tomcat站点上运行的每个应用程序:并且可以对其操作:( 开启,重载,暂停等服务)
还可以在上面部署新的应用:
启用host manager的功能:
vim /etc/tomcat/tomcat-users.xml
http://192.168.60.20:8080/host-manager/(在浏览器上打开就可以了)
在此界面下可以修改虚拟主机添加删除虚拟主机。
实验:实现多个虚拟主机:
编辑配置配置文件,添加虚拟主机:
vim /etc/tomcat/server.xml
(新添加的两个虚拟主机的主页面文件应该放在/data/test/ROOT/下和/data/host/ROOT/下;其他的子url路径放在/data/test/下和/data/host/下就可以了)
然后再/data/下新建两个文件夹test和host并在里面再新建ROOT目录:
mkdir /data/host/ROOT/
mkdir /data/test/ROOT/
然后在每个ROOT/下新建测试的实例程序:
vim index.jsp
<%@ page language=”java” %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color=”red”>TomcatA.magedu.com</font></h1>
<table align=”centre” border=”1″>
<tr>
<td>Session ID</td>
<% session.setAttribute(“magedu.com”,”magedu.com”); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
最后测试:由于需要解析 主机名所以只能在centos的图形界面上去访问:在centos6上在/etc/hosts文件里将主机名添加进去,大开centos6的浏览器去访问就可以了。
vim /etc/hosts
192.168.60.20 www.a.com www. b.com
然后在centos6上的图形界面打开浏览器访问就可以了:www.a.com:8080/www.b.com:8080
或者将tomcat配置文件里的默认主机更改为自己定义的虚拟主机,这样就可以在外部的浏览器上访问:
http://192.168.60.20:8080/
如果希望每个虚拟主机都有独立的日志记录,则需将模板复制到自己的虚拟主机的配置文件下。如下图:
/var/log/tomcat/a_access_log.2018-07-18.log (在此文件里生成新的虚拟主机的单个的日志了)
Context组件: (相当于apache的别名作用)
示例:
<Context path=”/PATH” docBase=”/PATH/TO/SOMEDIR” reloadable=””/>
上上述虚拟主机配置的基础上;添加内容
当访问www.a.com:8080/app时 访问资源的真实路径是 /data/hh/ROOT/index.jsp的应用程序。
注意:如果定义别名下的真实路径下面没有应用程序的话,会造成tomcat服务起不来(启后又自动关闭)
实验:实现用nginx将服务反代到后台的服务器上去
将所有服务都反代到后台服务器
1 . 在调度器上的配置:
yum install nginx (安装服务)
vim /etc/nginx/conf.d/test.conf (配置代理服务器的配置文件)
server {
listen 80 default_server;
server_name www.aa.com;
root /usr/share/nginx/html;
location / {
proxy_pass http://192.168.60.20:8080;
}
}
nginx (启动nginx服务)
2 .在后台服务器上的配置:
yum install tomcat (安装包)
yum install java-1.8.0-openjdk-devel(安装jdk)
systemctl start tomcat (启动服务)
ss -nult (查看端口号是否开启)
3 .在测试的机器上:
vim/etc/hosts
192.168.60.4 www.aa.com (此IP地址为nginx反代服务器的地址)
在此机器上的浏览器上打开网页:www.a.com
如果想实现在本机上访问在tomcat上新建的虚拟主机:
1 . 在nginx上的 (确保能够解析tomcat的虚拟主机名)
vim /etc/hosts
192.168.60.20 www.a.com (此IP为tomcat的主机的IP和虚拟主机名)
vim /etc/nginx/conf.d/test.conf
server {
listen 80 default_server;
server_name www.aa.com;
root /usr/share/nginx/html;
location / {
proxy_pass http://www.a.com:8080;
}
}
最后在测试机的浏览器上访问:www.aa.com 就可以了
实验:实现tomcat的负载均衡:(使用nginx作为反代服务器)
1 .在nginx服务器上:
yum install nginx (安装服务包)
vim /etc/nginx/nginx.conf
upstream www {
server 192.168.60.20:8080;
server 192.168.60.21:8080;
} (添加后端tomcat服务器的IP地址)
vim /etc/nginx/conf.d/test.conf
server {
listen 80 default_server;
server_name www.aa.com;
root /usr/share/nginx/html;
location / {
proxy_pass http://www;
}
} (这里没有指定调度算法。默认的是轮询的调度算法)重新加载服务
nginx -s reload (重新加载配置文件)
nginx 开启服务
2 . 在后台两台tomcat服务器上:
tomcat1上
yum install java-1.8.0-openjdk tomacat tomcat-docs-webapp tomcat-webapps
cd /usr/share/tomcat/webapps/ROOT/
删除原有的index.jsp的文件
然后新建测试文件
vim insex.jsp
<%@ page language=”java” %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color=”green”>TomcatA.magedu.com</font></h1>
<table align=”centre” border=”1″>
<tr>
<td>Session ID</td>
<% session.setAttribute(“magedu.com”,”magedu.com”); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
systemctl start tomcat (开启tomcat服务)
tomcat2上
yum install java-1.8.0-openjdk tomacat tomcat-docs-webapp tomcat-webapps
cd /usr/share/tomcat/webapps/ROOT/
删除原有的index.jsp的文件
然后新建测试文件
vim insex.jsp
<%@ page language=”java” %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color=”green”>TomcatA.magedu.com</font></h1>
<table align=”centre” border=”1″>
<tr>
<td>Session ID</td>
<% session.setAttribute(“magedu.com”,”magedu.com”); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
systemctl start tomcat (开启tomcat服务)
3 .在浏览器上访问nginx的IP地址:http://192.168.60.4/就可以实现对后台两台nginx的轮询调度访问了。
实验:实现单个主机的调度(使用httpd作反代服务器)
httpd的代理模块:
proxy_module
proxy_http_module:适配http协议客户端;
proxy_ajp_module:适配ajp协议客户端
httpd -M (可以查看所支持的模块列表)
1 .在代理服务器上:(使用http协议来实现反代)
yum install httpd
cd /etc/httpd/conf.d/ (进入此文件夹下创建配置文件)
vim http-tomcat.conf
<VirtualHost *:80>
ServerName tc1.magedu.com
ProxyRequests Off (关闭正向代理)
ProxyVia On
ProxyPreserveHost On
<Proxy *>
Require all granted (授权所有客户端能使用)
</Proxy>
ProxyPass / http:// 192.168.60.20:8080/
<Location />
Require all granted
</Location>
</VirtualHost>
systemctl restart httpd (重启服务)
2 在代理服务器上:(使用ajp协议来实现反代)
vim /etc/httpd/conf.d/ajp-tomcat.conf
<VirtualHost *:80>
ServerName web.com
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / ajp://192.168.60.21:8009/
Require all granted
</Location>
</VirtualHost>
systemctl restart httpd (重启服务)
tomcat1和tomcat2 的配置如上面的实验步骤
在客户端访问:httpd的IP地址就可以了。
实现负载均衡向后面多台住机去调度。
在代理服务器上:(使用http协议来实现反代)
<proxy balancer://web>
BalancerMember http://192.168.60.20:8080
BalancerMember http://192.168.60.21:8080
ProxySet lbmethod=byrequests (调度算法)
</Proxy>
<VirtualHost *:80>
ServerName tc1.magedu.com
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://web/
<Location />
Require all granted
</Location>
</VirtualHost>
systemctl restart httpd (重启服务)
tomcat1和tomcat2 的配置如上面的实验步骤
在客户端访问:httpd的IP地址就可以了。
在代理服务器上:(使用ajp协议来实现反代)
vim ajp-http.conf
<proxy balancer://web>
BalancerMember ajp://192.168.60.20:8009
BalancerMember ajp://192.168.60.21:8009
ProxySet lbmethod=byrequests (使用的调度算法)
</Proxy>
<VirtualHost *:80>
ServerName www.a.com
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://web/
<Location />
Require all granted
</Location>
</VirtualHost>
systemctl restart httpd (重启服务)
tomcat1和tomcat2 的配置如上面的实验步骤
在客户端访问:httpd的IP地址就可以了。
httpd调度的一些参数设置:
status:(状态)
D:禁用
S:orker is administratively stopped.
I: 由于系统默认就对后端服务器进行健康性检测,如果需要忽略检测,添加此选项就可以了。
H: 备用主机如果在某台主机上添加此选项,当所有主机都宕机时才开启此主机作为备用的。
E;标记为错误的模式
N:排干模式
示例:
BalancerMember ajp://192.168.60.20:8009 status=D
httpd的调度算法和权重:
loadfactor:
负载因子,即权重;
BalancerMember ajp://192.168.60.20:8009 loadfactor=2 (不写默认权重为1)
lbmethod:
调度算法:
byrequests:轮询的调度算法 (默认的调度算法)
会话粘性的实现方法:
Header add Set-Cookie “ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/” env=BALANCER_ROUTE_CHANGED
启用管理接口:(将下面的内容添加到配置文件里就可以了)
<Location /balancer-manager>
SetHandler balancer-manager
ProxyPass !
Require all granted
</Location>
systemctl restart httpd (重启服务)
在浏览器上访问:http://172.20.49.2/balancer-manager
查看打开的界面:
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/103104