Tomcat部署和优化

108 阅读6分钟

Tomcat部署和优化

1、什么是Tomcat?

Tomcat服务器是Java语言开发的,免费的开放源代码的Web应用服务器。

Tomcat处理静态HTML的能力远不及Apache或者Nginx,通常是作为一个Servlet和JSP容器,单独运行在后端。

2、Tomcat 核心组件

2.1 Tomcat的核心功能组件有两个:

  • 负责接收和反馈外部请求的连接器Connector;

  • 负责处理请求的容器Container。

2.2 其中连接器和容器相辅相成,一起构成了基本的web服务Service。

  • Connector:暴露监听端口,接收客户端发来的请求和返回响应消息给客户端

  • Container : 负责处理用户请求的业务逻辑。由4个子容器组成(engine、host、context、wrapper),子容器之间是父子关系

2.3 Container组件的结构

2.3.1 Container 结构分析

每个Service会包含一个Container容器。在Container内部包含了4个子容器,4个子容器的作用

  • Engine:引擎,用来管理多个虚拟主机,一个Service最多只能有一个Engine
  • Host:代表一个虚拟主机,也可以叫站点,通过配置Host就可以添加站点
  • Context:代表一个Web应用,包含多个Servlet封装器
  • Wrapper:封装器,容器的最底层。每一Wrapper封装着一个Servlet,负责对象实例的创建、执行和销毁功能

2.3.2 Engine、Host、Context 和 Wrapper,这四个容器之间属于层层递进的父子关系

  • engine: 引擎,管理多个虚拟主机,一个container只有一个engine

  • host: 代表一个虚拟主机

  • context: 管理web应用的路径

  • servlet封装器,负责处理业务逻辑wrapper

2.4 Tomcat 请求过程

客户端请求过程:

客户端浏览器——> connector ——>container(engine)——>host ——>context——>wrapper

  • container(engine) 根据域名发送给对应的虚拟主机
  • host 根据用户访问的URL路径
  • context 根据URL路径对应的Web应用
  • wrapper 根据应用程序处理业务逻辑

3、Tomcat 部署

3.1 安装JDK

#关闭防火墙和selinux 
systemctl disable firewalld --now 
setenforce 0 

#将源代码包置于/opt下 
apache-tomcat-9.0.16.tar.gz 
jdk-8u201-linux-x64.rpm
#安装JDK 
cd /opt 
rpm -ivh jdk-8u201-linux-x64.rpm
rpm -ql jdk1.8 | tail -n 1 
#确定安装路径
  • bin: 存放 Java 可执行文件的目录
  • include: 存放 Java 开发头文件的目录
  • jre: 存放 Java 运行时环境的目录
  • LICENSE: JDK 许可证文件
  • README.html: JDK 的直观说明文档(HTML 格式)
  • src.zip: JDK 的源代码压缩包
  • THIRDPARTYLICENSEREADME.txt: 第三方许可证文档
  • COPYRIGHT: JDK 的版权信息
  • javafx-src.zip: JavaFX 源代码压缩包
  • lib: 存放 JDK 和 JavaFX 库文件的目录
  • man: 存放 JDK 手册页(man page)文件的目录
  • release: JDK 的版本信息
  • THIRDPARTYLICENSEREADME-JAVAFX.txt: JavaFX 第三方许可证文档

3.1.1 java -version

JDK版本

3.2 设置JDK环境变量

#查看全局配置文件 
vim /etc/profile
vim /etc/profile.d/java.sh
 
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
#最左原则:linux查找可执行文件是根据PATH变量从左往右查找,找到即停止。
#所以需要将安装版本的路径放在$PATH前面

`CLASSPATH` 是一个环境变量,用于指定 Java 程序运行时的类路径。类路径是指计算机中存储 Java 类文件和库文件的路径。当 Java 程序运行时,虚拟机会搜索类路径上指定的路径,以找到所需的类文件和库文件,以便正确加载和执行程序。

#CLASSPATH和 PATH是必需的,而JAVA_HOME和JRE_HOME是为了方便修改,只需要修改JAVA_HOME

3.2.1 source /etc/profile.d/java.sh

java -version#查看JDK版本

3.3 安装Tomcat

cd /opt 
tar zxf apache-tomcat-9.0.16.tar.gz #解压tomcat安装包
mv apache-tomcat-9.0.16 /usr/local/tomcat
#将源码包目录拷贝至/usr/local/下并重命名为tomcat 
#简化路径,方便管理

启动Tomcat的方法,省略路径

startup.sh #后台启动tomcat 
catalina.sh start #后台启动tomcat 
catalina.sh run #前台启动tomcat

关闭Tomcat的方法:

shutdown.sh 关闭tomcat

查看tomcat是否启动:

netstat ss ps jps

4、Tomcat的端口和主要目录

4.1 Tomcat端口

  • 8080: 默认接收 http 请求的端口

  • 8005: 安全端口,可以关闭tomcat

  • 8009: apache 和 tomcat 联动 AJP 协议

  • 8443:负责处理https请求连接

4.2 主要目录

image.png

image.png

5、Tomcat虚拟主机

可能有时候公司会有多个项目需要运行,那么肯定不可能是一台服务器上运行多个Tomcat 服务,这样会消耗太多的系统资源。此时,就需要使用到 Tomcat 虚拟主机。

5.1 配置虚拟主机(基于域名)

例如现在新增两个域名

www.hzw.com

www.hhh.com

希望通过这两个域名访问到不同的项目内容。

  • 在 webapps 日录中添加各个站点的网页根目录,准备测试页面文件。

  • 修改 tomcat 主配置文件 server.xml

在 Engine 配置段下面添加多 Host 配置段,设置不同的虚拟主机配置参数;

在 Host 配置段下添加一个或多个 context 配置段,设置虚拟主机的web应用程序的存放位置。

docBase="/usr/local/tomcat/webapps/hzw" path=nhttp://www.hzw.com:8080/test/hzw.html -> /usr/local/tomcat/webapps/hzw/test/hzw.html

docBase="/usr/local/tomcat/webapps/hhh" path="test"http://www.hhh.com:8080/test/hhh.html -> /usr/local/tomcat/webapps/hhh/hhh.html

具体配置

创建 hzw 和 hhh 项目目录和文件

mkdir /usr/local/tomcat/webapps/hzw
mkdir /usr/local/tomcat/webapps/hhh

echo "This is hzw\!" > /usr/local/tomcat/webapps/hzw/index.jsp

echo "This is hhh\!" > /usr/local/tomcat/webapps/hhh/index.jsp

修改 Tomcat 主配置文件 server.xml

vim /usr/local/tomcat/conf/server.xml

#165行前插入
<Host name="www.kgc.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <Context docBase="/usr/local/tomcat/webapps/byyb" path="" reloadable="true" />
</Host>

<Host name="www.byyd.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <Context docBase="/usr/local/tomcat/webapps/byyd" path="" reloadable="true" />\
</Host> 

##注释##
Host 
name:主机名
appBase:Tomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为 /usr/local/tomcat/webapps
unpackWARs:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true
autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true
xmlValidation:是否验证xml文件执行有效性检验的标志
xmlNamespaceAware:是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验

Context
docBase:相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;
path:相对于Web服务器根路径而言的URI;如果为空"",则表示为此webapp的根路径 / ;
reloadable:是否允许重新加载此context相关的Web应用程序的类;默认为false
##

重新启动

systemctl restart tomcat

添加映射

echo "192.168.137.101 www.hzw.com www.hhh.com" >> /etc/hosts

浏览器访问验证

使用虚拟机的浏览器访问,windows需要修改本地hosts文件

浏览器访问 www.hzw.com:8080/

浏览器访问 www.hhh.com:8080/

6、Tomcat优化

6.1 配置文件优化

  • maxThreads (最大线程数/并发)

  • processorCache (进程缓冲)

  • acceptCount (等待队列数)

  • enableLookups (关闭DNS反向解析)

  • URIEncoding (网页字符集编码UTF-8)

  • maxKeepAliveRequests (长连接最大请求数)

  • connectionTimeout (连接超时时间)

  • compression (开启页面压缩)

6.2 系统内核优化

/etc/security/limits.conf 
nofile 
nproc 
memlock
/etc/sysct.conf   
net .ipv4.tcp_tw_reuse=1   
net.ipv4.tcp_tw_recycle=1  
net.ipv4.tcp_fin_timeout=30  
net.ipv4.tcp_max_tw_buckets=5000              net.ipv4.ip_local_port_range=1024 65535

6.3 JVM优化

image.png