Tomcat部署及多实例
一、Tomcat简介
Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。
1、Tomcat核心组件
通常意义上的 web 服务器接受请求后,只是单纯地响应静态资源,如HTMI文件,图片文件等,不能在后端进行一定的处理操作。Tomcat是 Apache 下的一个子项目,它具备 web服务器的所有功能(WEB容器嵌入Servlet-动态请求),不仅可以监听接受请求并响应静态资源,而且可以在后端运行特定规范的Java代码servlet,同时将执行的结果以HTML代码的形式写回客户端。
2、什么是JSP
JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java代码。标签通常以 <% 开头,以 %> 结束。
JSP 是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。
JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
二、Tomcat数据流向
1、Tomcat数据流向
用户请求(访问80端口)——》
发送请求发送给tomcat——》
tomcat有一个端口在监听8080端口)
从8080端口进入流量的会被在此端口的线程监听到
给与我们的web容器进行处理(有index.html页面显示出来 从8080端口来时会有交互界面 会读取到index.jsp这种java代码)
但是java代码无法直接使用——》
需要利用到jsp容器
将index.jsp中的java的servlet代码进行翻译
servlet容器处理 通过catalina程序/脚本来处理从JSP容器这过来的servlet代码
并不是直接对接mysql数据库
而是直接对接用户的请求例如app中的某个功能模块
比方说看个人信息 servlet容器与app接是api进行对接(具体的URL)
数据流向最终会通过用户请求内容 去mysql数据库寻找相应的内容
最后返回给用户
2、Tomcat-Nginx数据流向
首先,客户请求nginx页面,就是访问80端口
nginx进行反向代理,去请求连接Tomcat的8080端口
Tomcat里面有一个负责接收和反馈外部请求的连接器 Connector
Connector中有前端页面和协议会监听8080端口,从8080端口进入的请求会被监听到
Tomcat接收到请求之后,然后把这个请求交给负责处理请求的容器Container中的Engine来处理
Engine接收到请求之后,会匹配所有的虚拟主机Host
Host相当于站点,就相当于我们正常去访问一个域名一样
不同的需求会有不同的路径,这时候就让Context来确定访问路径
找到访问路径之后,里面有一个index.jsp文件,它会把这个文件的Java代码提取出来
然后交给sercvet来翻译这个代码,用Catalina来处理这个代码
最后将执行结果一层一层原路返回
三、Tomcat服务部署安装
1、安装jdk包
[root@localhost opt]# setenforce 0 ##关闭核心防护
setenforce: SELinux is disabled
[root@localhost opt]# systemctl stop firewalld ##关闭防火墙
[root@localhost opt]# rpm -ivh jdk-8u201-linux-x64.rpm ##安装jdk包
2、解压Tomcat所需的安装包
[root@localhost opt]# tar zxf apache-tomcat-9.0.16.tar.gz
3、在/etc/profile添加环境变量
[root@localhost opt]# vim /etc/profile
[root@localhost opt]# source /etc/profile #刷新
4、启动服务并查看
[root@localhost opt]# cp -r apache-tomcat-9.0.16 /usr/local/tomcat
[root@localhost opt]# cd /usr/local/tomcat/bin/
[root@localhost bin]# /usr/local/tomcat/bin/startup.sh #用绝对路径启动服务
5、在浏览器网页验证
6、创建用户,修改属主属组
[root@localhost bin]#/usr/local/tomcat/bin/shutdown.sh #关闭服务
[root@localhost bin]# useradd -s /sbin/nologin tomcat #新建用户
[root@localhost ~]# cd /usr/local/
[root@localhost local]# chown tomcat:tomcat -R tomcat/ #修改属主属组
#####编写tomcat.service文件######
[root@localhost local]# vim /etc/systemd/system/tomcat.service
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
[root@localhost local]# systemctl daemon-reload
[root@localhost local]# systemctl start tomcat.service
[root@localhost local]# ss -natp |grep 8080
四、Tomcat虚拟主机配置
很多时候公司会有多个项目需要运行,那么肯定不可能是一台服务器上运行多个Tomcat服务,这样会消耗太多的系统资源。此时,就需要使用到 Tomcat 虚拟主机。例如现在新增两个域名 www.zhantai.com和 www.zzt.com希望通过这两个域名访问到不同的项目内容。
1、创建创建zhantai和zzt项目目录和文件
[root@localhost]cd /usr/local/tomcat/webapps/
[root@localhost webapps]# mkdir zhantai zzt
[root@localhost webapps]# echo "this is zhantai" > zhantai/index.jsp
[root@localhost webapps]# echo "this is zzt" > zzt/index.jsp
[root@localhost webapps]#
2、修改主配置文件
[root@localhost webapps]# vim /usr/local/tomcat/conf/server.xml
<Host name="www.zhantai.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context docBase="/usr/local/tomcat/webapps/zhantai" path="" reloadable="true" />
</Host>
<Host name="www.zzt.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context docBase="/usr/local/tomcat/webapps/zzt" path="" reloadable="true" />
</Host>
[root@localhost webapps]# systemctl restart tomcat.service
[root@localhost webapps]# ss -natp |grep 8080
3、浏览器访问验证
更改hosts文件 ,在Windows,C:\Windows\System32\drivers\etc 改hosts文件,在Linux中是/etc/hosts文件修改。
五、Tomcat优化
1、配置文件参数优化
选项名称 | 参数 |
---|---|
maxThreads | Tomcat 使用线程来处理接收的每个请求,这个值表示 Tomcat 可创建的最大的线程数,默认值是 200。 |
minSpareThreads | 最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是 10。 |
maxSpareThreads | 最大备用线程数,一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程。默认值是-1(无限制)。一般不需要指定 |
URIEncoding | 指定 Tomcat 容器的 URL 编码格式,语言编码格式这块倒不如其它 Web服务器软件配置方便,需要分别指定utf-8 |
connnectionTimeout | 网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。通常默认 20000 毫秒(20秒)就可以。 |
enableLookups | 是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为 false,则直接返回 IP 地址,为了提高处理能力,应设置为 false。 |
disableUploadTimeout | 上传时是否使用超时机制。应设置为 true。 |
connectionUploadTimeout | 上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使 Servlet 有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效 |
acceptCount | 指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为 100 个。 |
compression | 是否对响应的数据进行 GZIP 压缩,off:表示禁止压缩;on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为 off,压缩数据后可以有效的减少页面的大小,一般可以减小 1/3 左右,节省带宽。 |
compressionMinSize | 表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是 2048。 |
compressableMimeType | 压缩类型,指定对哪些类型的文件进行数据压缩。 |
noCompressionUserAgents=“gozilla, traviata” | 对于以下的浏览器,不启用压缩 |
2、Tomcat主配置文件
vim /usr/local/tomcat/conf/server.xml
<Connector port="8080" protocol="HTTP/11.1"
connectionTimeout="20000"
redirectPort="8443"
minSpareThreads="50"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="300"
maxThreads="500"
processorCache="500"
URIEncoding="UTF-8"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png"/>
小结
Tomcat的核心组件和功能组件的作用。分析了Tomcat的数据流向,以及Tomcat主机如何部署安装,如何优化。在安装 Tomcat 之前必须先安装JDK。server.xml为Tomcat 的主要配置文件,通过配置该文件,可以修改 Tomcat 的启动端口、网站目录、虚拟主机、开启https等重要功能。
六、Tomcat多实例
1、实验介绍
Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,互不影响。多实例与虚拟主机不同,虚拟主机的本质是在一个服务下有多个相对独立的目录,但是多实例却存在了多个服务。今天,我们就来实现以下Tomcat的多实例配置。
实验环境:
-
云服务器192.168.10.132
-
Tomcat实例1开放端口:8080、8005、8009
-
Tomcat实例2开放端口:8081、8006、8010
注意:由于我们此次使用的Tomcat版本较新,因此,在默认情况下,8009(8010)端口不会开启
2、实例配置
(1)关闭防火墙、核心防护
[root@localhost opt]# systemctl stop firewalld
[root@localhost opt]# setenforce 0
(2)安装Tomcat所需软件包到/opt、及其jdk
[root@localhost opt]# rpm -ivh jdk-8u201-linux-x64.rpm #安装jdk
[root@localhost opt]# java -version #查看版本信息
[root@localhost opt]# mkdir /usr/local/tomcat
[root@localhost opt]#mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
[root@localhost opt]#cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2
(3)配置Tomcat环境变量
[root@localhost opt]#vim /etc/profile.d/tomcat.sh
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1
#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2
(4)修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号
vim /usr/local/tomcat/tomcat2/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN"> #22行,修改Server prot,默认为8005 ->修改为8006
<Connector port="8081" protocol="HTTP/1.1" #69行,修改Connector port,HTTP/1.1 默认为8080 -> 修改为8081
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" /> #116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010
(5)修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
vim /usr/local/tomcat/tomcat1/bin/startup.sh
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
vim /usr/local/tomcat/tomcat2/bin/startup.sh
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
(6)启动Tomcat中的/bin/startup.sh
[root@localhost opt]# /usr/local/tomcat/tomcat1/bin/startup.sh
[root@localhost opt]# /usr/local/tomcat/tomcat2/bin/startup.sh
[root@localhost opt]# netstat -natp | grep java
3、浏览器访问测试
http://192.168.80.101:8080
http://192.168.80.101:8081
总结
Tomcat多实例与虚拟主机不同,虚拟主机的本质是在一个服务下有多个相对独立的目录,但是多实例却存在了多个服务。