目录
Tomcat介绍
Tomcat是一种由Apache软件基金会开发的、用Java语言编写的免费、开放源代码的Web应用服务器。它是Jakarta项目的核心组件之一,由Apache、Sun以及其他公司和个人共同开发。Tomcat通常被用于中小型系统和并发访问用户不是很多的场合,因为它是一种轻量级应用服务器,特别适用于开发和调试JSP(JavaServer Pages)程序。
tomcat核心组件
web容器
是一个服务器端的软件环境,用于运行Web应用程序,处理HTTP请求和响应。Web容器是Web服务器的一部分,负责管理和执行Web应用程序中的服务器端组件,如Servlet和JSP(JavaServer Pages)。
-
接受,响应请求
-
展示动态页面
JSP容器
是用于托管和执行JavaServer Pages(JSP)的运行时环境。与Servlet容器类似,JSP容器通常是Web服务器或应用服务器的一部分。它提供了必要的支持,以便在服务器上运行JSP页面,
- 翻译java为Serverlet
Servlet容器
Servlet容器是一种用于托管和执行Java Servlet的环境,通常是Web服务器或应用服务器的一部分。Servlet容器提供了必要的基础设施,以便在服务器上运行Servlet,
- 借助于catalina来执行serverlet代码(动态任务执行标准格式)
因此Tomcat是 web应用服务器,也是一个Servlet/JSP容器。Tomcat作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet 的响应传送回给客户。
Servlet(服务器端Java程序):
定义: Servlet是一种Java编写的服务器端程序,它扩展了服务器的功能,并能够动态生成Web页面。Servlet运行在服务器上,接收来自客户端的请求并产生相应的响应。
特点:
-
Servlet是独立于平台的Java类,可以在任何支持Java的服务器上运行。
-
Servlet通常被用于处理业务逻辑、数据库连接、用户身份验证等服务器端任务。
-
Servlet生命周期由容器(如Tomcat)管理,包括实例化、初始化、服务请求和销毁等阶段。
使用场景:
-
处理表单提交、用户登录等Web请求。
-
与数据库交互,执行业务逻辑。
-
动态生成HTML内容。
JSP(JavaServer Pages):
定义: JSP是一种基于Java的技术,允许在HTML页面中嵌入Java代码。它简化了动态Web页面的创建,使得开发者可以在页面中嵌套Java代码,而无需在Servlet中编写大量的Java代码。
特点:
-
JSP页面本质上是包含Java代码的HTML页面,其中的Java代码由特殊的标签(
<% %>
)包裹。 -
JSP页面在首次访问时会被容器编译成Servlet,然后由Servlet容器运行。
-
JSP提供了易于维护和理解的模板化开发方式,允许开发者将Java代码和HTML页面结合起来。
使用场景:
-
创建动态内容的Web页面。
-
在HTML页面中嵌套Java代码以执行业务逻辑。
-
通过使用标签库(Tag Libraries)扩展页面功能。
tomcat功能组件结构
Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器Connector,和负责处理请求的容器Container其中连接器和容器相辅相成,一起构成了基本的web服务Service。每个Tomcat服务器可以管理多个Service。
-
Connector:负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理最后将容器处理后的结果响应给外界。
-
Container:负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper四个子容器组成,用于管理和调用servlet 相关逻辑。
-
Engine:引擎,用来管理多个虚拟主机,一个Service最多只能有一个 Engine;
-
Host:代表一个虚拟主机,也可以叫站点,通过配置Host就可以添加站点;
-
Context:代表一个web 应用,包含多个Servlet封装器;
-
Mrapper:封装器,容器的最底层。每一 WMrapper封装着一个Servlet,负责对象实例的创建、执行和销毁功能。
Engine、Host、Context和 wrapper,这四个容器之间属于父子关系。容器由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个web应用。每个web应用会有多个Servlet封装器。
-
Service:对外提供的 web服务。主要包含Connector 和Container两个核心组件,以及其他功能组件。Tomcat可以管理多个service,且各个service相互独立
tomcat请求过程
-
请求发送: 当客户端(通常是Web浏览器)发送一个HTTP请求时,请求首先到达服务器的网络端口。默认情况下,Tomcat监听的端口是8080。
-
Connector: 请求被Tomcat服务器上的Connector接收。Connector是Tomcat用于处理HTTP请求的组件之一。它负责监听指定的端口,并将接收到的请求传递给后续的处理组件。
-
交给Service和Engine处理: Connector将请求交给与其关联的Service和Engine来处理。一个Tomcat服务器可以包含多个Service,每个Service可以包含多个Engine。Engine是用于处理请求的核心组件。
-
匹配虚拟主机(Host): Engine首先尝试匹配请求的主机名(Host)与其所拥有的虚拟主机(Host)配置。虚拟主机允许在同一Tomcat实例上托管多个域名或应用程序。
-
匹配上下文(Context): 虚拟主机匹配后,请求被传递给匹配的上下文(Context)。上下文是Web应用程序的上下文路径,通常对应于部署的应用程序。
-
Servlet处理: 上下文确定后,请求被传递给相应的Servlet来处理。Servlet是Java程序,用于处理Web请求和生成Web响应。Servlet可以通过Java编写,例如在Java中实现的业务逻辑。
-
Servlet生成响应: Servlet执行相应的业务逻辑,并生成用于构建HTTP响应的内容。这可以包括动态生成的HTML、JSON、XML等。
-
响应返回: 生成的响应被返回给Tomcat的 Connector。
-
发送到客户端: 最后, Connector将生成的HTTP响应发送回客户端,完成整个请求-响应周期。
这是一个简化的描述,实际上Tomcat的请求处理涉及到更多的细节和组件。这个过程的关键点是,Tomcat通过Connector、Service、Engine、虚拟主机和上下文等组件来有效地处理和路由HTTP请求,最终通过Servlet来生成动态内容并返回给客户端。
tomcat如何执行应用(java代码)
tomcat可以做为JAVA代码环境,只要把JAVA代码环境(.class可执行类的文件或者war包或者jar包,放在webapps中,那么在tomcat启动时,就可以解压、并运行/webapps中的这些应用(只需要修改配置文件)
主要目录说明
-
bin:存放启动和关闭Tomcat等的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh三个文件
-
conf:存放Tomcat服务器的各种配置文件,比较常用的是server.xml、context.xml、tomcat-users.xml、 web. xml四个文件。
-
server.xml: Tomcat的主配置文件,包含Service,Connector,Engine,Realm,Valve,Hosts主组件的相关配置信息
-
context.xml:所有host的默认配置信息;
-
tomcat-user.xml :Realm认证时用到的相关角色、用户和密码等信息,Tomcat自带的manager默认情况下会用到此文件,在Tomcat中添加/册删除用户,为用户指|定角色等将通过编辑此文件实现;
-
web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的web应用程序提供包括MINB映射等默认配置信息。
-
lib:存放Tomcat运行需要的库文件的jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的jar包
-
logs:存放Tomcat执行时的日志
-
temp:存放Tomcat运行时产生的文件
-
webapps:存放Tomcat默认的web 应用部署目录
-
work: Tomcat工作日录,存放jsp编译后产生的class文件,一般清除Tomcat缓存的时候会使用到
-
src:存放Tomcat的源代码
-
doc:存放Tomcat文档
tomcat服务部署示例
在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。
关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
安装JDK
cd /opt
rpm -qpl jdk-8u201-linux-x64.rpm
rpm -ivh jdk-8u201-linux-x64.rpm
java -version
rpm -qpl jdk-8u201-linux-x64.rpm
rpm 是 RPM 包管理器的命令行工具。
-q 表示查询模式,用于查询已安装的包。
-p 表示查询的是尚未安装的包文件。
l 表示列出包中的文件列表。
jdk-8u201-linux-x64.rpm 是要查询的 RPM 包的文件名。
作用:
该命令用于查看尚未安装的 RPM 包中包含的文件列表。
rpm -ivh jdk-8u201-linux-x64.rpm
rpm 是 RPM 包管理器的命令行工具。
-i 表示安装模式,用于安装新的 RPM 包。
-v 表示详细模式,用于显示安装的详细信息。
-h 表示显示进度条。
作用:
该命令用于安装指定的 RPM 包。
设置JDK环境变量
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
运行脚本刷新配置
-
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
-
这行命令设置了一个名为
JAVA_HOME
的环境变量,并将其值设为/usr/java/jdk1.8.0_201-amd64
。 -
JAVA_HOME
通常被很多 Java 应用程序用作 Java 安装目录的参考,方便其他程序或脚本引用。
-
-
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
-
这行命令设置了一个名为
CLASSPATH
的环境变量。 -
CLASSPATH
是 Java 程序运行时查找类和库的路径列表。 -
.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
将当前目录.
、tools.jar
和dt.jar
文件所在路径加入到类路径中。
-
-
export PATH=$JAVA_HOME/bin:$PATH
-
这行命令将 Java 可执行文件目录添加到系统的 PATH 环境变量中。
-
PATH
环境变量用于指定系统在哪些目录中查找可执行文件。 -
将
$JAVA_HOME/bin
添加到PATH
可以让系统在执行命令时找到 Java 的可执行文件,如java
、javac
等。
总的来说,这段脚本主要是为了:
-
-
定义
JAVA_HOME
,告诉系统 Java 的安装位置。 -
设置
CLASSPATH
,让 Java 程序在运行时可以找到需要的类和库。 -
更新
PATH
,使得系统可以直接在命令行中执行 Java 相关的可执行文件,而无需输入完整路径。这样设置环境变量后,系统就能够更方便地使用特定版本的 Java 进行开发和运行 Java 应用程序。
CLASSPATH
:编译、运行Java程序时,JRE会去该变量指定的路径中搜索所需的类(.class)文件。 dt.jar
:是关于运行环境的类库,主要是可视化的 swing 的包。
tools.jar
:主要是一些jdk工具的类库,包括javac、java、javap(jdk自带的一个反编译工具)、javadoc等。
JDK
:java development kit (java开发工具)
JRE
:java runtime environment (java运行时环境)
JVM
:java virtuak machine (java虚拟机),使java程序可以在多种平台上运行class文件。
安装apache
安装Tomcat
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
tar zxvf apache-tomcat-9.0.16.tar.gz
-
tar
是用于处理归档文件(通常是.tar文件)的命令。 -
z
表示使用 gzip 压缩/解压缩。 -
x
表示提取文件。 -
v
表示详细模式,输出详细信息,让你能够看到解压缩的过程。 -
f
表示后面紧跟着的是要操作的文件名。所以,
tar zxvf apache-tomcat-9.0.16.tar.gz
的作用是将apache-tomcat-9.0.16.tar.gz
这个 gzip 压缩的文件解压缩,并将其中的内容提取出来。
启动tomcat
#后台启动
/usr/local/tomcat/bin/catalina.sh start
#前台启动
/usr/local/tomcat/bin/catalina.sh run
检查
netstat -natp | grep 8080
这个命令用于在系统上查找与端口号 8080 相关联的网络连接信息。以下是各个部分的解释:
-
netstat
: 用于显示网络连接、路由表和网络接口信息的命令。 -
-n
: 表示以数字形式显示地址和端口号,而不进行反向域名解析。 -
-a
: 显示所有连接和监听端口。 -
-t
: 仅显示 TCP 协议的连接。 -
-p
: 显示进程标识符和程序名称,使你能够查看每个连接对应的进程。 -
|
: 管道符,用于将一个命令的输出传递给另一个命令。 -
grep 8080
: 用于过滤包含 "8080" 的行,只显示与端口号 8080 相关的连接信息。综合起来,
netstat -natp | grep 8080
的作用是显示系统上所有与端口号 8080 相关联的 TCP 连接信息,并列出每个连接对应的进程标识符和程序名称。浏览器访问Tomcat的默认主页 http://192.168.41.10:8080
优化tomcat启动速度
第一次启动tomcat可能会发现启动很慢,可以修改jdk参数修改。
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
#修改117行为securerandom.source=file:/dev/urandom
解释这个设置的含义:
-
securerandom.source
: 这是 Java 安全随机数生成器 (SecureRandom
) 的属性之一,用于指定随机数生成器的源。 -
file:/dev/urandom
: 这部分指定了随机数生成器的源为/dev/urandom
。-
/dev/urandom
是在类Unix系统上的一个设备文件,提供非阻塞的随机数。它是/dev/random
的变种,但不会像/dev/random
一样阻塞等待足够的熵。 -
使用
/dev/urandom
而不是/dev/random
的原因是,/dev/urandom
不会在熵不足的情况下阻塞,因此更适合用于生成随机数,特别是在启动时或在虚拟环境中。
-
-
/dev/urandom
是/dev/random
的非阻塞版本,/dev/random
的random pool
依赖于系统中断,因此在系统的中断数不足时,/dev /random
设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用,/dev/random
设备可以保证数据的随机性。 -
/dev/urandom
不依赖系统的中断,也就不会造成进程忙等待,但是数据的随机性也不高,所以该随机数的安全性理论上不高。如果应用对安全性要求很高,那么应该使用/dev/random。
重启服务
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
#这两个脚本位于 Tomcat 安装目录的 bin 子目录下。使用这两个脚本的一般步骤如下:
#运行 shutdown.sh 脚本以关闭现有的 Tomcat 服务器实例。
#运行 startup.sh 脚本以启动 Tomcat 服务器。
tomcat虚拟主机配置
在 Tomcat 中配置虚拟主机(Virtual Host)允许在同一台服务器上托管多个域名或主机名的不同网站。
很多时候公司会有多个项目需要运行,一般不会是在一台服务器上运行多个Tomcat 服务,这样会消耗太多的系统资源。此时,就需要使用到Tomcat 虚拟主机。
例如现在新增两个域名过这两个域名访问到不同的项目内容。www.test1.com和www.test2.com
以下是配置 Tomcat 虚拟主机的基本步骤:
创建 test1 和 test2 项目目录和文件
mkdir /usr/local/tomcat/webapps/test1
mkdir /usr/local/tomcat/webapps/test2
echo "This is test1 page\!" > /usr/local/tomcat/webapps/test1/index.jsp
echo "This is test2 page\!" > /usr/local/tomcat/webapps/test2/index.jsp
修改 Tomcat 主配置文件 server.xml:
vim /usr/local/tomcat/conf/server.xml
--165行前--插入
<Host name="www.test1.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/test1" path="" reloadable="true" />
</Host>
<Host name="www.test2.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/test2" path="" reloadable="true" />
</Host>
这是对 www.test1.com
虚拟主机的配置。重要的属性和元素包括:
-
name
: 指定虚拟主机的域名为www.test1.com
。 -
appBase
: 指定应用程序基础目录为webapps
。 -
unpackWARs
和autoDeploy
: 启用自动部署和解压 WAR 文件。 -
xmlValidation
和xmlNamespaceAware
: 分别表示 XML 验证和 XML 命名空间感知功能是否开启。 -
<Context>
元素定义了该虚拟主机上的上下文路径和相关配置,其中docBase
指定了实际应用程序的路径,path
定义了 URL 上下文路径为空,意味着应用程序将根据主机名直接访问。-
name
属性指定主机名。 -
appBase
属性指定此虚拟主机的应用程序基础目录。Tomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为 /usr/local/tomcat/webapps -
unpackWARs
设置为true
以在部署时解压 WAR 文件。 -
autoDeploy
设置为true
以启用自动部署新的应用程序。 -
xmlValidation
:是否验证xml文件执行有效性检验的标志 -
xmlNamespaceAware
:是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验 -
docBase
:相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径; -
path
:相对于Web服务器根路径而言的URI;如果为空“”,则表示为此webapp的根路径 / ; -
reloadable
:是否允许重新加载此context相关的Web应用程序的类;默认为false -
<Alias>
元素允许为同一个虚拟主机定义多个别名。 -
<Context>
元素定义了这个虚拟主机的上下文路径、文档根目录和其他参数。
-
配置域名与 IP 的映射(如果需要):
-
如果需要在本地开发或测试环境中模拟域名访问,可以通过修改 hosts 文件将域名映射到本地 IP。
/etc/hosts
中添加映射Plain Text echo "192.168.41.10 www.test1.com www.test2.com" >> /etc/hosts
重启 Tomcat:
- 保存
server.xml
文件,并重新启动 Tomcat 服务器,以使配置更改生效。
/usr/local/tomcat/bin/shutdown.sh 关闭
/usr/local/tomcat/bin/startup.sh 启动
客户端浏览器访问验证
浏览器访问 http://www.test1.com:8080/ 页面显示This is test1 page! 浏览器访问 http://www.test2.com:8080/ 页面显示This is test2 page!
tomcat优化
Tomcat默认安装下的缺省配置并不适合生产环境,它可能会频繁出现假死现象需要重启,只有通过不断压测优化才能让它最高效率稳定的运行。优化主要包括三方面,分别为操作系统优化(内核参数优化),Tomcat配置文件参数优化,Java虚拟机(JVM)调优。
Tomcat 配置文件参数优化
-
【redirectPort】如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口。
-
【maxThreads】Tomcat使用线程来处理接收的每个请求,这个值表示Tomcat可创建的最大的线程数,即支持的最大并发连接数,默认值是 200。
-
【minSpareThreads】最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是 10。
-
【maxSpareThreads】最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值是-1(无限制)。一般不需要指定。
-
【URIEncoding】指定 Tomcat 容器的 URL 编码格式,语言编码格式这块倒不如其它 Web服务器软件配置方便,需要分别指定。
-
【connnectionTimeout】网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。通常默认 20000 毫秒就可以。
-
【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"】对于以下的浏览器,不启用压缩
以上是一些常用的配置参数,还有好多其它的参数设置,还可以继续深入的优化,HTTP Connector 与 AJP Connector 的参数属性值,可以参考官方文档的详细说明进行学习使用。
vim /usr/local/tomcat/conf/server.xml
......
<Connector port="8080" protocol="HTTP/11.1"
connectionTimeout="20000"
redirectPort="8443"
#--71行--插入
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 的 <Connector>
元素的配置,用于定义 Tomcat 接受客户端请求的连接器。以下是各个属性的解析:
port
:
- 指定 Tomcat 监听的端口号,这里是 8080。
protocol
:
- 指定使用的协议,这里是
HTTP/11.1
。通常情况下,你可能会使用HTTP/1.1
或HTTP/2
。
connectionTimeout
:
- 定义连接超时的时间,这里是 20,000 毫秒(20秒)。如果一个连接在这个时间内没有活动,则会被关闭。
redirectPort
:
- 指定在使用 SSL 进行安全连接时,应该使用的重定向端口。这里是 8443。
minSpareThreads
和 maxThreads
:
-
minSpareThreads
指定在非繁忙时,保持的最小空闲线程数。 -
maxThreads
指定连接器处理的最大并发请求的线程数。在这个配置中,最大线程数被设置为 500。
processorCache
:
- 指定处理器的缓存大小。这里设置为 500,表示最多缓存 500 个处理器实例。
URIEncoding
:
- 指定用于编码请求的 URI 的字符编码。这里是 UTF-8。
compression
:
- 启用或禁用响应的压缩。这里设置为 "on",表示启用压缩。
compressionMinSize
:
- 指定响应内容的最小大小,小于该大小的响应内容不会被压缩。这里是 2048 字节。
compressableMimeType
:
- 指定可以被压缩的 MIME 类型。在这个配置中,指定了一系列文本类型和图像类型。
其他属性:
-
enableLookups="false"
:禁用 DNS 反查,以提高性能。 -
disableUploadTimeout="true"
:禁用上传超时,以避免因为上传时间过长而导致连接被关闭。
tomcat 多实例部署
前期准备
安装jdk,tomcat
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mkdir /usr/local/tomcat
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2
配置tomcat环境变量
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
source /etc/profile.d/tomcat.sh
对于 tomcat1:
-
CATALINA_HOME1
:Tomcat的主目录(即Tomcat的安装目录)的路径,设置为/usr/local/tomcat/tomcat1
。 -
CATALINA_BASE1
:Tomcat的基本目录的路径,设置为/usr/local/tomcat/tomcat1
。通常,这个目录包含实例特定的配置和数据。 -
TOMCAT_HOME1
:Tomcat的主目录路径,同样设置为/usr/local/tomcat/tomcat1
。
修改 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
-
第一个连接器默认监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。
-
第二个连接器默认监听8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。
修改各 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
启动各 tomcat 中的 /bin/startup.sh
/usr/local/tomcat/tomcat1/bin/startup.sh
/usr/local/tomcat/tomcat2/bin/startup.sh
浏览器访问测试
Tomcat 的多实例和虚拟主机是两种不同的配置方式,用于满足不同的需求和场景。以下是它们的主要区别:
多实例配置:
-
定义: 多实例是指在一台设备上运行多个独立的 Tomcat 服务实例,它们互相独立,拥有各自的配置、日志和应用程序。
-
配置过程: 对于每个实例,你需要复制 Tomcat 的安装目录,然后在每个实例中进行相应的配置更改,例如更改端口、日志路径等。每个实例都有独立的
conf
、logs
、webapps
等目录。 -
适用场景: 多实例适用于需要在同一台服务器上运行多个相互独立的 Tomcat 实例的情况,例如在一个服务器上同时运行不同版本的应用或为不同的项目提供独立的运行环境。
虚拟主机配置:
-
定义: 虚拟主机是一种配置方式,允许在同一 Tomcat 实例中为不同的域名配置不同的 Web 应用程序。每个虚拟主机可以有独立的配置、日志和应用程序。
-
配置过程: 在 Tomcat 的
server.xml
文件中,通过配置<Host>
元素来定义虚拟主机。每个<Host>
元素代表一个虚拟主机,可以指定不同的域名和相应的 Web 应用程序。 -
适用场景: 虚拟主机适用于在同一 Tomcat 实例中为多个域名提供服务的情况。这是一种更轻量级的隔离方式,适用于较小规模的部署,其中多个域名共享同一实例。
总体来说,多实例适用于需要在同一服务器上运行多个完全独立的 Tomcat 实例的情况,而虚拟主机适用于在同一实例中为多个域名提供服务的情况。