centos 7.6 —— 部署Tomcat
文章目录
- centos 7.6 —— 部署Tomcat
- 一、Tomcat 介绍
- (1)Tomcat核心组件
- (2)Tomcat处理请求过程
- (3)Tomcat目录结构
- (4)Tomcat 配置文件参数优化
- 实验一:部署Tomcat&安装JDK
- 1. 安装tomcat
- 2. 优化Tomcat的启动方式
- 3. 关闭Tomcat
- 实验二:基于域名构建虚拟主机
- 虚拟机win10 验证
- Tomcat 配置文件参数优化
一、Tomcat 介绍
- 免费的、开放源代码的Web应用服务器
- Apache软件基金会(Apache Software Foundation)Jakarta项目中的一个核心项目
由Apache、Sun和一些公司及个人共同开发而成 - 深受Java爱好者的喜爱,并得到部分软件开发商的认可
- 目前比较流行的Web应用服务器
(1)Tomcat核心组件
通常意义上的 Web 服务器接受请求后,只是单纯地响应静态资源(如 HTML 文件、图 片文件等),不能在后端进行一定的处理操作。 Tomcat 是 Apache 下的一个子项目,它具 备 Web 服务器的所有功能,不仅可以监听接受请求并响应静态资源,而且可以在后端运行 特定规范的 Java 代码 Servlet,同时将执行的结果以 HTML 代码的形式返回客户端。
- web容器:web服务器
- servlet容器: 名为Catalina,处理servlet 代码
- JSP容器: 将JSP动态网页翻译成servlet代码
(2)Tomcat处理请求过程
Tomcat 具体的处理请求过程如下所示。
- 用户在浏览器中输入网址 localhost:8080/test/index.jsp,请求被发送到本机端口 8080, 被在那里监听的
Coyote HTTP/1.1 Connector 获得; - Connector 把该请求交给它所在的 Service 的
Engine(Container)来处理,并等待 Engine 的回应; - Engine 获得请求 localhost/test/index.jsp,匹配所有的虚拟主机 Host;
- Engine 匹配到名为 localhost 的 Host(即使匹配不到也把请求交给该 Host 处理,因为 该 Host 被 定 义为 该 Engine 的 默 认 主 机 ) , 名 为 localhost 的 Host 获 得 请 求/test/index.jsp,匹配它所拥有的所有 Context。Host 匹配到路径为/test 的 Context(如果匹配不到就把该请求交给路径名为“ ”的 Context 去处理);
- path=“/test”的 Context 获得请求/index.jsp,在它的 mapping table 中寻找出对应的servlet。Context 匹配到 URL Pattern 为*.jsp 的 Servlet,对应于 JspServlet 类;
- 构造 HttpServletRequest 对象和 HttpServletResponse 对象,作为参数调用 JspServlet 的doGet()或 doPost(),执行业务逻辑、数据存储等;
- Context 把执行完之后的 HttpServletResponse 对象返回给 Host;
- Host 把 HttpServletResponse 对象返回给 Engine;
- Engine 把 HttpServletResponse 对象返回 Connector;
- Connector 把 HttpServletResponse 对象返回给客户 Browser。
(3)Tomcat目录结构
/usr/local/tomcat/webapps/ROOT //网页目录
(4)Tomcat 配置文件参数优化
Tomcat主配置文件server.xml 常用的配置参数
- maxThreads
- minSpareThreads
- maxSpareThreads
- URIEncoding
- connnectionTimeout
- enableLookups
- disableUploadTimeout
- connectionUploadTimeout
- acceptCount
- compression
- compressionMinSize
- compressableMimeType
- noCompressionUserAgents=“gozilla, traviata”
如果对代码进行了动静分离处理,静态页面和图片等数据就不需做Tomcat 处理,也就不要在Tomcat 中配置压缩
实验一:部署Tomcat&安装JDK
1. 安装tomcat
[root@promote opt]# ll
总用量 182612
-rw-r--r-- 1 root root 10783080 8月 12 17:25 apache-tomcat-9.0.16.tar.
-rw-r--r-- 1 root root 176209195 8月 12 17:29 jdk-8u201-linux-x64.rpm
drwxr-xr-x. 2 root root 6 10月 31 2018 rh
[root@promote opt]#
[root@promote opt]# rpm -ivh jdk-8u201-linux-x64.rpm
[root@promote opt]# iptables -F
[root@promote opt]# setenforce 0
setenforce: SELinux is disabled
[root@promote opt]# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
[root@promote java]# ll
总用量 0
lrwxrwxrwx 1 root root 16 8月 13 09:33 default -> /usr/java/latest
drwxr-xr-x 8 root root 258 8月 13 09:33 jdk1.8.0_201-amd64
lrwxrwxrwx 1 root root 28 8月 13 09:33 latest -> /usr/java/jdk1.8.0_201-amd64
[root@promote java]# cd jdk1.8.0_201-amd64/
[root@promote jdk1.8.0_201-amd64]# ll
总用量 25980
drwxr-xr-x 2 root root 4096 8月 13 09:33 bin
-rw-r--r-- 1 root root 3244 12月 16 2018 COPYRIGHT
drwxr-xr-x 3 root root 132 8月 13 09:33 include
-rw-r--r-- 1 root root 5207434 12月 12 2018 javafx-src.zip
drwxr-xr-x 5 root root 185 8月 13 09:33 jre //jre就是Java的虚拟机
drwxr-xr-x 5 root root 245 8月 13 09:33 lib
-rw-r--r-- 1 root root 40 12月 16 2018 LICENSE
drwxr-xr-x 4 root root 47 8月 13 09:33 man
-rw-r--r-- 1 root root 159 12月 16 2018 README.html
-rw-r--r-- 1 root root 424 12月 16 2018 release
-rw-r--r-- 1 root root 21103945 12月 16 2018 src.zip
-rw-r--r-- 1 root root 108109 12月 12 2018 THIRDPARTYLICENSEREADME-JAVAFX.txt
-rw-r--r-- 1 root root 155002 12月 16 2018 THIRDPARTYLICENSEREADME.txt
[root@promote jdk1.8.0_201-amd64]# vim /etc/profile //设置环境变量新增命令
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
[root@promote jdk1.8.0_201-amd64]# source /etc/profile
[root@promote jdk1.8.0_201-amd64]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
[root@promote jdk1.8.0_201-amd64]# cd /opt
[root@promote opt]# tar zxvf apache-tomcat-9.0.16.tar.gz -C /usr/local/
[root@promote opt]# cd /usr/local/
[root@promote local]# ls
apache-tomcat-9.0.16 etc include lib64 sbin src
bin games lib libexec share
[root@promote local]# mv apache-tomcat-9.0.16/ tomcat
[root@promote local]# cd tomcat/
[root@promote tomcat]# ll
总用量 124
drwxr-x--- 2 root root 4096 8月 13 09:53 bin
-rw-r----- 1 root root 19203 2月 5 2019 BUILDING.txt
drwx------ 2 root root 238 2月 5 2019 conf
-rw-r----- 1 root root 6095 2月 5 2019 CONTRIBUTING.md
drwxr-x--- 2 root root 4096 8月 13 09:53 lib
-rw-r----- 1 root root 57092 2月 5 2019 LICENSE
drwxr-x--- 2 root root 6 2月 5 2019 logs
-rw-r----- 1 root root 2333 2月 5 2019 NOTICE
-rw-r----- 1 root root 3255 2月 5 2019 README.md
-rw-r----- 1 root root 6854 2月 5 2019 RELEASE-NOTES
-rw-r----- 1 root root 16262 2月 5 2019 RUNNING.txt
drwxr-x--- 2 root root 30 8月 13 09:53 temp
drwxr-x--- 7 root root 81 2月 5 2019 webapps
drwxr-x--- 2 root root 6 2月 5 2019 work
[root@promote tomcat]# cd bin/
[root@promote bin]# ln -s /usr/local/tomcat/bin/startup.sh /usr/bin/
[root@promote bin]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/bin/
[root@promote bin]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@promote bin]# netstat -natp | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 13752/java
[root@promote bin]#
虚拟机win10 验证 192.168.75.129:8080
2. 优化Tomcat的启动方式
第一次启动查看日志会发现Tomcat启动很慢,默认情况下需要几十秒,可以修改JDK参数进行更改。
知识
/dev/random 和 /dev/urandom 是Linux系统中提供的随机伪设备,这两个设备的任务,
是提供永不为空的随机字节数据流,很多解密程序与安全应用程序(如SSH Keys,SSL Keys等) 需要它们提供的随机数据流。
区别:
这两个设置的差异在于:/dev/random 的random pool 依赖于系统中断,因此在系统的中断不足时,
/dev/random 设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用。
/dev/random 设备可以保证数据的随机性,/dev/urandom 不依赖系统的中断,也就不会造成进程忙等待,但是数据的随机性也不高。
[root@promote bin]# cd /usr/java/jdk1.8.0_201-amd64/jre/lib/security/
[root@promote security]# ls
blacklist cacerts java.security policy
blacklisted.certs java.policy javaws.policy trusted.libraries
[root@promote security]# vim java.security
# In addition, if "file:/dev/random" or "file:/dev/urandom" is
# specified, the "NativePRNG" implementation will be more preferred than
# SHA1PRNG in the Sun provider.
#
securerandom.source=file:/dev/urandom //改为urandom
3. 关闭Tomcat
[root@promote security]# /usr/local/tomcat/bin/shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
实验二:基于域名构建虚拟主机
yum -y install bind
vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
vim /etc/named.rfc1912.zones
zone "kgc.com" IN {
type master;
file "kgc.com.zone";
allow-update { none; };
};
zone "benet.com" IN {
type master;
file "benet.com.zone";
allow-update { none; };
};
cd /var/named/
cp -p named.localhost kgc.com.zone
[root@localhost named]# vim kgc.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
www IN A 192.168.75.129
cp -p kgc.com.zone benet.com.zone
cd /usr/local/tomcat/webapps/
mkdir kgc benet
vim /kgc/index.jsp
<h1>this is kgc !!! </h>
vim /benet/index.jsp
<h1>this is benet !!! </h>
[root@promote opt]# vim /usr/local/tomcat/conf/server.xml
<Host name="www.kgc.com" appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/kgc" path="" reloadable="true" />
</Host>
<Host name="www.benet.com" appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true" />
</Host>
</Engine>
</Service>
</Server>
~
iptables -F
setenforce 0
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh //重启Tomcat服务
systemctl restart named //重启DNS服务
虚拟机win10 验证
- www.kgc.com:8080
- www.benet.com:8080
Tomcat 配置文件参数优化
关于 Tomcat 主配置文件 server.xml 里面很多默认的配置项,并不能满足业务需求,常 用的优化参数如下。
- maxThreads:Tomcat 使用线程来处理接收的每个请求,这个值表示 Tomcat 可创建的 最大的线程数,默认值是 200。
- minSpareThreads:最小空闲线程数,Tomcat 启动时的初始化线程数,表示即使没有 人使用也开这么多空线程等待,默认值是
10。 - maxSpareThreads:最大备用线程数,一旦创建的线程超过这个值,Tomcat 就会关闭 不再需要的 socket
线程。默认值是-1(无限制),一般不需要指定。 - URIEncoding:指定 Tomcat 容器的 URL 编码格式,Tomcat 语言编码格式这块不如 其它
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”:对于以下的浏览器,不启用压缩。 如果已经对代码进行了动静分离,静态页面和图片等数据就不需要 Tomcat 处理了,那 么也就不需要在 Tomcat 中配置压缩了。因为这里只有一台 Tomcat 服务器,而且压测的是 Tomcat 首页,会有图片和静态资源文件,所以这里启用压缩。
以上是一些常用的配置参数,还有好多其它的参数设置,还可以继续深入的优化,HTTP Connector 与 AJP Connector 的参数属性值,可以参考官方文档的详细说明进行学习。链 接地址 http://tomcat.apache.org/tomcat-9.0-doc/config/http.html,下面开始对 Tomcat 配置 文件优化进行前后的对比。