tomcat8安装在公网IP为x.x.x.x的服务器上
tomcat安装
第一步,下载server-jre-8u202-linux-x64.tar.gz和apache-tomcat-8.5.95.tar.gz安装包。
登录地址:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html下载server-jre-8u202-linux-x64.tar.gz安装包。登录地址:https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.95/bin下载apache-tomcat-8.5.95.tar.gz安装包。然后使用WinSCP将安装包上传到/usr/local/src文件夹中。也可以使用wget命令下载。
命令:cd /usr/local/src
wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.95/bin/apache-tomcat-8.5.95.tar.gz
第二步,解压server-jre-8u202-linux-x64.tar.gz和apache-tomcat-8.5.95.tar.gz安装包。
命令:cd /usr/local/src
tar -zxvf server-jre-8u202-linux-x64.tar.gz -C /usr/local
tar -zxvf apache-tomcat-8.5.95.tar.gz -C /usr/local
cd /usr/local
mv apache-tomcat-8.5.95 tomcat1
第三步,将/usr/local/jdk1.8.0_202和/usr/local/tomcat1的所有者及所属组改为tomcat。
命令:useradd tomcat
chown -R tomcat:tomcat /usr/local/jdk1.8.0_202
chown -R tomcat:tomcat /usr/local/tomcat1
第四步,配置环境变量。
配置/etc/profile文件,在文件添加下面的代码:
export JAVA_HOME=/usr/local/jdk1.8.0_202
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JRE_HOME/lib/rt.jar:$JRE_HOME/lib/ext:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
# 刷新profile文件
命令:source /etc/profile
第五步,测试server-jre是否配置成功。
# 查看jdk版本
命令:java -version
若结果显示server-jre的版本,则说明server-jre配置成功。
tomcat配置及启动
第一步,编辑配置/usr/local/tomcat1中的server.xml文件。
进入文件夹/usr/local/tomcat1/conf,server.xml编辑完成后代码如下:
<?xml version="1.0" encoding="UTF-8"?>
...
<Server port="8105" shutdown="SHUTDOWN"> #port设置为8105
...
<Connector executor="tomcatThreadPool" port="8081" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"
maxPostSize="-1" maxHttpHeaderSize ="102400"/>
<!-- A "Connector" using the shared thread pool-->
...
</Server>
第二步,编辑配置/usr/local/tomcat1/bin下的 catalina.sh文件。
为防止出错,先提前备份一下,然后在第117行添加下面的代码:
JAVA_HOME=/usr/local/jdk1.8.0_202
JRE_HOME=/usr/local/jdk1.8.0_202/jre
JAVA_OPTS="$JAVA_OPTS -server -Xms1024m -Xmx1024m"
接着把UMASK="0027"修改为UMASK="0022"。
最后赋予权限。
命令:cd /usr/local/tomcat1/bin
chmod a+x catalina.sh
第三步,测试tomcat1是否配置成功。
命令:cd /usr/local/tomcat1/bin
./startup.sh
netstat -ntl | grep 8081
若结果成功显示“Tomcat started”,则说明tomcat成功启动。
若tomcat启动失败,则可能是启动时使用的端口被其他应用程序占用了,可以查看端口被哪个应用程序占用了。
命令:netstat -nap | grep [tomcat端口号]
或 lsof -i:[tomcat端口号]
或 netstat -ntl | grep [tomcat端口号]
tomcat成功启动后,然后直接根据http://y.y.y.y:8081(http://y.y.y.y/index.jsp)在本地浏览器访问。
若页面成功显示“Apache Tomcat/8.5.95”,则说明tomcat配置成功。
若发现访问不到,则可以查看防火墙是否开着。
# 查看防火墙的状态
命令:systemctl status firewalld.service
# 临时将防火墙关闭
命令:systemctl stop firewalld.service
# 关闭tomcat
命令:./shutdown.sh
第四步,复制tomcat1文件夹7次并都粘贴在/usr/local/文件夹中。
cp -pr /usr/local/tomcat1 /usr/local/tomcat2
cp -pr /usr/local/tomcat1 /usr/local/tomcat3
cp -pr /usr/local/tomcat1 /usr/local/tomcat4
cp -pr /usr/local/tomcat1 /usr/local/tomcat5
cp -pr /usr/local/tomcat1 /usr/local/tomcat6
cp -pr /usr/local/tomcat1 /usr/local/tomcat7
cp -pr /usr/local/tomcat1 /usr/local/tomcat8
第五步,重复“tomcat配置及启动”中的第一、二和三步。
在配置文件server.xml中更改端口号,编辑配置 catalina.sh文件。
关机重启,tomcat会自动启动(可选,一般不这样做)
第一步,编辑配置/etc/rc.d/rc.local,在/etc/rc.d/rc.local文件最后一行另起一行,添加下面的代码:
export JAVA_HOME=/usr/local/jdk1.8.0_202
export JRE_HOME=$JAVA_HOME/jre
/usr/local/tomcat1/bin/startup.sh start
/usr/local/tomcat2/bin/startup.sh start
/usr/local/tomcat3/bin/startup.sh start
/usr/local/tomcat4/bin/startup.sh start
/usr/local/tomcat5/bin/startup.sh start
/usr/local/tomcat6/bin/startup.sh start
/usr/local/tomcat7/bin/startup.sh start
/usr/local/tomcat8/bin/startup.sh start
第二步,编辑rc.local文件为可执行。
命令:chmod +x /etc/rc.d/rc.local
第三步,重启服务器,然后查看tomcat是否启动。
命令:reboot 或 shutdown -r now 或 shutdown -r 10 或 init 6
# 查看tomcat是否启动
命令:netstat -nap | grep [tomcat端口号]
或 lsof -i:[tomcat端口号]
或 netstat -ntl | grep [tomcat端口号]
不进入tomcat根目录即可进行相应的操作
第一步,进入/etc/rc.d/init.d文件夹,新建文件,命名为tomcat1,并在文件中编写脚本。文件的脚本如下:
#!/bin/bash
#
# tomcat1 startup script for the Tomcat1 server
#
#
# chkconfig: 2345 80 20
# description: start the tomcat1 deamon
#
# Source function library
. /etc/rc.d/init.d/functions
prog=tomcat1
case "$1" in
start)
echo "Starting Tomcat1..."
/usr/local/tomcat1/bin/startup.sh
;;
stop)
echo "Stopping Tomcat1..."
/usr/local/tomcat1/bin/shutdown.sh
;;
res)
echo "Stopping Tomcat1..."
/usr/local/tomcat1/bin/shutdown.sh
sleep 60
echo "Starting Tomcat1..."
/usr/local/tomcat1/bin/startup.sh
;;
*)
echo "Usage: $prog {start|stop|res}"
;;
esac
exit 0
第二步,添加执行权限并设置开机自启。
命令:chmod +x /etc/init.d/tomcat*
# 设置开机自启
命令:chkconfig --add tomcat1
chkconfig tomcat1 on
# 检查tomcat1命令
命令:service tomcat1
Usage: tomcat1 {start|stop|res}
第三步,检查一下脚本是否有用。
命令:/sbin/chkconfig tomcat1 on
sudo /sbin/chkconfig --list tomcat1
如果结果显示“tomcat1 0:off 1:off 2:on 3:on 4:on 5:on 6:off”,则说明脚本文件有用。
第四步,tomcat启动、关闭以及重启命令。
命令:service tomcat1 start
service tomcat1 stop
service tomcat1 restart
第五步,再新建7个文件,分别命名为tomcat2、tomcat3、...和tomcat8,重复执行第一、二、三和四步。
第六步,重启服务器,然后查看tomcat是否启动。
命令:reboot
或 shutdown -r now
或 shutdown -r 10
或 init 6
# 查看tomcat是否启动
命令:netstat -nap | grep [tomcat端口号]
或 lsof -i:[tomcat端口号]
或 netstat -ntl | grep [tomcat端口号]
优化tomcat服务启动速度
有五种解决办法:
1)在tomcat环境中解决
可以通过配置JRE使用非阻塞的Entropy Source。
在/usr/local/tomcat1/bin/catalina.sh中加入这么一行:
-Djava.security.egd=file:/dev/./urandom
加入后再启动tomcat,启动速度就非常快。
2)在JVM环境中解决
打开$JAVA_HOME/jre/lib/security/java.security文件,找到
“securerandom.source=file:/dev/urandom”,并把它修改成
“securerandom.source=file:/dev/./urandom”。(对所有使用JVM的应用生效)修改之后启动tomcat,启动速度就非常快。
3)增大/dev/random的熵池
# 可以查看现在的熵池大小(45)
命令:cat /proc/sys/kernel/random/entropy_avail
# 要增大熵池的值,CPU要支持DRNG特性,可以充分利用硬件来提高熵池产生的速度,查看服务器是否支持DRNG特性
命令:cat /proc/cpuinfo | grep rdrand
# 安装rng-tools(安装rngd服务(熵服务))
命令:yum -y install rng-tools
systemctl enable rngd
systemctl start rngd
# 查看熵池的值是否会变大(3097)
命令:cat /proc/sys/kernel/random/entropy_avail
安装rng-tools之后可以直接使用random生成随机数,而不需要修改$JAVA_HOME/jre/lib/security/java.security中的生成随机数。
最后启动tomcat,会发现启动速度就非常快。
若CPU不支持DRNG特性或者使用虚拟机,则可以使用/dev/unrandom来模拟。
命令:cp /usr/lib/systemd/system/rngd.service /etc/systemd/system
编辑配置/etc/systemd/system/rngd.service文件,设置
“ExecStart=/sbin/rngd -f -r /dev/urandom”。
# 重新载入服务
命令:systemctl daemon-reload
# 重启服务
命令:systemctl restart rngd
# 可以查看现在的熵池大小(基本上在3000左右)
命令:cat /proc/sys/kernel/random/entropy_avail
# 可以测试随机数的生成速度
watch -n 1 cat /proc/sys/kernel/random/entropy_avail
# 重新打开一个shell,用dd命令测试随机数(5秒产生了40960个随机数,/proc/sys/kernel/random/entropy_avail会有剧烈的变化,所有随机数产生之后它又会保持在3000左右)
命令:dd if=/dev/random of=random.dat count=40960
最好选择第三种方式,熵池不仅仅tomcat使用,Linux下的所有应用程序产生随机数都会用到这个,因此不仅仅是tomcat可能被阻塞。根治的方法应该是通过rngd提高随机数生成的速度。
如何重现故障
# 停止rngd服务
命令:systemctl stop rngd
# 查看当前熵池的大小
命令:cat /proc/sys/kernel/random/entropy_avail
# 强制消费1024个随机数,系统会长时间没有反应,然后直接Ctrl+C
命令:head -c 1024 /dev/random
# 再次查看熵池的大小,保证熵池尽可能小
命令:cat /proc/sys/kernel/random/entropy_avail
最后启动tomcat,会发现会长时间等待。
4)tomcat 需要部署的web应用程序太多
tomcat启动比较慢是因为它需要部署的web应用程序太多,但是其中有些应用程序是不需要的,可以将不需要的webapps删除,然后再进行发布。如果想并行启动多个web应用程序且服务器是多核的,那么可以设置Host的属性startStopThreads值设置大于1,但不超过内核数。
5)tomcat启动内存不足
如果项目比较大,使用默认的参数去启动的tomcat是很有可能内存不足的,这样的话,需要设置JVM,将内存调整,JVM的最大值和最小值建议是不要相差太大(最好一致)。
在启动脚本/usr/local/tomcat1/bin/catalina.sh文件加上:
JAVA_OPTS='-server -Xms1024m -Xmx1024m'
具体的内存大小,可以根据业务调整。
禁用DNS查询
当web应用程序想要记录客户端的信息时,也会记录客户端的IP地址或者通过域名服务器查找机器名转换为IP地址。
DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。
修改/usr/local/tomcat1/conf/server.xml文件中的Connector元素,修改属性enableLookups参数值:
enableLookups="false"
如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址。
缓存优化
对于静态页面最好可以缓存起来,这样就不必每次从磁盘上读取。采用Nginx作为缓存服务器,将图片、css、js等文件都进行了缓存,有效地减少了后端tomcat的访问。
启用GZIP压缩
第一步,修改配置文件/usr/local/tomcat1/conf/server.xml,修改节点如下:
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,
application/javascript,text/css,text/plain,text/json"/>
第二步,GZIP的缺点。
相对于没有进行GZIP的服务器来说,使用GZIP要增加服务器压缩的压力(cpu消耗)、客户端解压缩的压力,所以使用GZIP对服务器的配置需求更高。
另外使用GZIP压缩也要耗费时间。想占用更小的空间,得到高压缩比率,肯定要牺牲较长的时间;反之,若时间较为宝贵,要求快速,则所得的压缩比率一定较小,一定会占用更大的空间(压缩比率=原内容大小/压缩后大小,压缩比率越大,则表明压缩后占用空间的压缩包越小),这就是物理空间与时间的矛盾。
设置session过期时间
tomcat采用数据库连接池技术,当用户在一定时间内不对数据库进行操作,tomcat就会自动关闭连接,这是为了更好地利用资源,防止浪费宝贵的数据库连接资源。
/usr/local/tomcat1/conf/web.xml文件中通过参数指定:
<session-config>
<session-timeout>180</session-timeout> #单位为分钟
</session-config>
tomcat的安全配置
第一步,当tomcat安装成功后,需要做的事情如下:
首次安装完成后立即删除webapps下面的所有代码
命令:rm -rf /usr/local/tomcat1/webapps/*
注释或删除tomcat-users.xml所有用户权限。
第二步,隐藏tomcat版本。
首先找到/usr/local/tomcat1/lib/catalina.jar,
然后解压catalina.jar,按照路径/org/apache/catalina/util/找到ServerInfo.properties文件。
命令:cd /usr/local/tomcat1/lib
jar xvf catalina.jar
然后编辑修改ServerInfo.properties文件,把server.number和server.built置空。最后重新打成jar包,重启tomcat服务。
命令:cd /usr/local/tomcat1/lib
jar cvf catalina.jar META-INF org
第三步,隐藏tomcat 的服务类型。
/usr/local/tomcat1/conf/server.xml文件中,为connector元素添加server=" ",注意不是空字符串,是空格组成的长度为1的字符串,或者输入其他的服务类型,在response header中就没有server的信息。
第四步,应用程序安全。
关闭war自动部署,设置unpackWARs="false" autoDeploy="false",防止被植入木马等恶意程序。
第五步,修改服务监听端口。
一般公司的tomcat都是放在内网的,因此针对tomcat服务的监听地址都是内网地址。
修改实例:<Connector port="8081" address="x1.x1.x1.x1" />