Tomcat配置优化 修改server.xml
Tomcat 8.5 安全配置与高并发优化
默认配置
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
优化配置
# 用此项配置 protocol="org.apache.coyote.http11.Http11Nio2Protocol"启动时会有警告 # 警告 [main] org.apache.tomcat.util.net.Nio2Endpoint.bind The NIO2 connector requires an exclusive executor to operate properly on shutdown <Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="40000" maxConnections="10000" redirectPort="8443" enableLookups="false" acceptCount="100" maxPostSize="10485760" compression="on" disableUploadTimeout="true" compressionMinSize="2048" acceptorThreadCount="2" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" maxHttpHeaderSize="8192" processorCache="20000" tcpNoDelay="true" connectionLinger="5" server="Server Version 11.0" URIEncoding="utf-8" />
优化配置升级(连接池)
未配置APR
可使用org.apache.coyote.http11.Http11NioProtocol
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="800" minSpareThreads="100" maxSpareThreads="500" prestartminSpareThreads="true" maxQueueSize="200" maxIdleTime="30000" /> <Connector executor="tomcatThreadPool" port="8081" URIEncoding="UTF-8" protocol="org.apache.coyote.http11.Http11AprProtocol" connectionTimeout="10000" acceptCount="200" acceptorThreadCount="2" maxConnections="8192" enableLookups="false" redirectPort="8443" server=" " compression="on" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" />
server.xml
配置供参考
已启用apr
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="800" minSpareThreads="100" maxSpareThreads="500" prestartminSpareThreads="true" maxQueueSize="100" maxIdleTime="20000" /> <Connector executor="tomcatThreadPool" port="7171" URIEncoding="UTF-8" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" acceptCount="100" acceptorThreadCount="2" maxConnections="8192" enableLookups="false" redirectPort="8443" server=" " compression="on" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" />
配置对照 protocol,Tomcat 8 设置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol(如果这个用不了,就用下面那个) protocol,Tomcat 6、7 设置 nio 更好:org.apache.coyote.http11.Http11NioProtocol enableLookups,禁用DNS查询 acceptCount,指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认设置 100 maxPostSize,以 FORM URL 参数方式的 POST 提交方式,限制提交最大的大小,默认是 2097152(2兆),它使用的单位是字节。10485760 为 10M。如果要禁用限制,则可以设置为 -1。 maxPostSize:设置由容器解析的URL参数的最大长度,-1(小于0)为禁用这个属性,默认为2097152(2M) 请注意, FailedRequestFilter 过滤器可以用来拒绝达到了极限值的请求。 acceptorThreadCount,用于接收连接的线程的数量,默认值是1。一般这个指需要改动的时候是因为该服务器是一个多核CPU,如果是多核 CPU 一般配置为 2. acceptorThreadCount:用于接受连接的线程数量。增加这个值在多CPU的机器上,尽管你永远不会真正需要超过2。 也有很多非维持连接,您可能希望增加这个值。默认值是1。 connectionTimeout:Connector接受一个连接后等待的时间(milliseconds),默认值是60000。 maxConnections:这个值表示最多可以有多少个socket连接到tomcat上 maxHttpHeaderSize:http请求头信息的最大程度,超过此长度的部分不予处理。一般8K。 compression:是否启用GZIP压缩 on为启用(文本数据压缩) off为不启用, force 压缩所有数据 disableUploadTimeout:这个标志允许servlet容器使用一个不同的,通常长在数据上传连接超时。 如果不指定,这个属性被设置为true,表示禁用该时间超时。 compressionMinSize:当超过最小数据大小才进行压缩 compressableMimeType:配置想压缩的数据类型 URIEncoding:网站一般采用UTF-8作为默认编码。 processorCache:协议处理器缓存的处理器对象来提高性能。 该设置决定多少这些对象的缓存。-1意味着无限的,默认是200。 如果不使用Servlet 3.0异步处理,默认是使用一样的maxThreads设置。 如果使用Servlet 3.0异步处理,默认是使用大maxThreads和预期的并发请求的最大数量(同步和异步)。 tcpNoDelay:如果设置为true,TCP_NO_DELAY选项将被设置在服务器套接字,而在大多数情况下提高性能。这是默认设置为true。 connectionLinger:秒数在这个连接器将持续使用的套接字时关闭。默认值是 -1,禁用socket 延迟时间。 server:隐藏Tomcat版本信息,首先隐藏HTTP头中的版本信息
禁用 AJP Tomcat8.5.88 当前教程版本中是默认关闭AJP
的
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
隐藏 Tomcat 版本号 cd /usr/local/tomcat/lib/
cd org/apache/catalina/util
vim ServerInfo.properties
#server.info=Apache Tomcat/8.5.16 #server.number=8.5.16.0 #server.built=Jun 21 2017 17:01:09 UTC server.info= server.number= server.built=
Tomcat 配置APR线程池 参考文档(搭建OK)
辅助-参考文档
安装成功配置情况示例参考 Tomcat 8.5.88 成功开启APR模式依赖组件版本信息如下:
下载依赖文件 最新依赖下载地址
历史依赖下载地址
编译环境准备 yum -y install gcc gcc-c++ libtool* autoconf automake expat-devel perl perl-devel
编译apr组件 apr
./configure --prefix=/usr/local/apr
apr-iconv
cd /path/apr/apr-iconv-1.2.2
./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
apr-util
cd /path/apr/apr-util-1.6.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
tomcat-native
cd /path/tomcat-native-1.2.16-src/native
./configure --with-java-home=/opt/jdk/jdk1.8.0_151/ --with-ssl=/usr/local/openssl
错误情况记录 openssl版本低 centos 7 将 OpenSSL 升级到 1.1.1 版本或以上版本
wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz --no-check-certificate
tar -zxvf openssl-1.1.0g.tar.gz
./config --prefix=/usr/local/openssl
./config -t
修改环境变量
export PATH=/usr/local/openssl/bin:$PATH export LD_LIBRARY_PATH=/usr/local/openssllib:$LD_LIBRARY_PATH
验证openssl版本
修改环境变量 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
修改conf/server.xml配置文件
连接池protocol="org.apache.coyote.http11.Http11AprProtocol"
替换命令vim
操作
:%s/protocol="org.apache.coyote.http11.Http11NioProtocol"/protocol="org.apache.coyote.http11.Http11AprProtocol"/g
修改setenv.sh(可忽略)
-Djava.library.path=/usr/local/apr/lib
配置apr环境变量后不需要单独配置当前项
Apr启用成功截图
设置环境setenv.sh
注意:若配置一台服务器多个Tomcat,其他Tomcat的setenv.sh
中’$CATALINA_BASE’也需要修改!
#Java环境(注意:若不配置jdk环境,以service方式启动报错!!!) JAVA_HOME=/opt/jdk1.8.0_151 #配置tomcat启动后将进程号保存至 ./bin/tomcat.pid 文件 CATALINA_PID="$CATALINA_BASE/tomcat.pid" #添加JAVA启动变量配置 ### 末尾可添加针对开启jspAgent配置: -javaagent:/usr/local/services/tomcat_8.5.88/8084/jspAgent/JSPAgent.jar ### ##默认一般jdk启动配置参数 ##JAVA_OPTS="-server -XX:PermSize=256M -XX:MaxPermSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m" ##修改后的jdk启动配置参数(APR模式) ##JAVA_OPTS="-Djava.io.tmpdir=/tmp -Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -XX:+TieredCompilation -Xms8192m -Xmx8192m -XX:NewSize=6144m -XX:MaxNewSize=6144m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=512M -XX:SurvivorRatio=8 -XX:ParallelGCThreads=8 -XX:+UseAdaptiveSizePolicy -XX:+UseCompressedOops -XX:+UseBiasedLocking -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintCommandLineFlags -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -Xloggc:/root/gc.$$.log -Djava.library.path=/usr/local/apr/lib" ##修改后的jdk启动配置参数(非APR模式) JAVA_OPTS="-Djava.io.tmpdir=/tmp -Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -XX:+TieredCompilation -Xms8192m -Xmx8192m -XX:NewSize=6144m -XX:MaxNewSize=6144m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=512M -XX:SurvivorRatio=8 -XX:ParallelGCThreads=8 -XX:+UseAdaptiveSizePolicy -XX:+UseCompressedOops -XX:+UseBiasedLocking -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintCommandLineFlags -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -Xloggc:../logs/gclogs/gc.$$.log"
某环境配置项(可参考)
JAVA_OPTS="-server -Xms7168m -Xmx7168m -Xmn2400m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -XX:ReservedCodeCacheSize=1024M -XX:SurvivorRatio=8 -Djava.io.tmpdir=/tmp -Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Dfile.encoding=UTF-8 -XX:+AggressiveOpts -XX:+TieredCompilation -XX:+UseCompressedOops -XX:+UseBiasedLocking -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled -XX:CMSInitiatingOccupancyFraction=75 -XX:+PrintCommandLineFlags -XX:+HeapDumpOnOutOfMemoryError -XX:CMSFullGCsBeforeCompaction=2 -XX:SoftRefLRUPolicyMSPerMB=0 -Djava.library.path=/usr/local/apr/lib -javaagent:/usr/local/services/tomcat851/jspAgent/JSPAgent.jar";
日志按日分割 当前配置项,请自行忽略!, 请跳转日志优化板块
在bin
目录下创建back_catalina_out.sh
脚本内容
#!/bin/bash #tomcat日志目录 log_path=/usr/local/services/tomcat_8.5.88/8081/logs d=`date +%Y-%m-%d` d30=`date -d'5 day ago' +%Y-%m-%d` cd ${log_path} && cp catalina.out $log_path/catalina.out.$d.log echo > catalina.out rm -rf $log_path/catalina.out.${d30}.log rm -rf $log_path/localhost_access_log.${d30}.txt
赋予执行权限
chmod u+x back_catalina_out.sh
添加corn
系统定时任务
0 0 * * * /usr/local/services/tomcat_8.5.88/8081/bin/back_catalina_out.sh
日志优化 环境变量配置
Tomcat_LOGPATH_9091=/usr/local/services/tomcat_9.0.83/9091/logs export Tomcat_LOGPATH_9091
脚本文件修改
#!/bin/bash #tomcat日志目录 log_path=${Tomcat_LOGPATH_9091} d=`date +%Y-%m-%d` d30=`date -d'5 day ago' +%Y-%m-%d` cd ${log_path} && cp catalina.out $log_path/catalina.out.$d.log echo > catalina.out rm -rf $log_path/catalina.out.${d30}.log rm -rf $log_path/localhost_access_log.${d30}.txt
cron定时任务执行的sh脚本中涉及引用环境变量配置,则需要修改定时任务项配置
Linux 中 Crontab 执行时的环境变量问题
0 0 * * * . /etc/profile;/bin/sh /usr/local/services/tomcat_9.0.83/9091/bin/back_catalina_out.sh
配置Tomcat随系统启动 新增配置文件
vi /usr/lib/systemd/system/tomcat8.service
文件内容
[Unit] Description=Tomcat After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=oneshot #Tomcat的目录地址 ExecStart=/usr/local/services/tomcat_8.5.88/8081/bin/startup.sh ExecStop=/usr/local/services/tomcat_8.5.88/8081/bin/shutdown.sh ExecReload=/bin/kill -s HUP $MAINPID RemainAfterExit=yes [Install] WantedBy=multi-user.target
设置开机启动
常见命令
#启动tomcat systemctl start tomcat8_8082.service #关闭tomcat systemctl stop tomcat8_8082.service #重启tomcat systemctl restart tomcat8_8082.service #查看状态tomcat systemctl status tomcat8_8082.service
Linux配置多个Tomcat容器 复制已配置好Tomcat目录8081
cp -rf 8081 8082 cp -rf 8081 8083 cp -rf 8081 8084
配置多Tomcat环境变量 修改/etc/profile
配置文件
命名规则:CATALINA-{序号}-BASE-{版本号}
##########first tomcat########### CATALINA_1_BASE_8_5_88=/usr/local/services/tomcat_8.5.88/8081 CATALINA_1_HOME_8_5_88=/usr/local/services/tomcat_8.5.88/8081 TOMCAT_1_HOME_8_5_88=/usr/local/services/tomcat_8.5.88/8081 export CATALINA_1_BASE_8_5_88 CATALINA_1_HOME_8_5_88 TOMCAT_1_HOME_8_5_88 ##########first tomcat########### ##########second tomcat########## CATALINA_2_BASE_8_5_88=/usr/local/services/tomcat_8.5.88/8082 CATALINA_2_HOME_8_5_88=/usr/local/services/tomcat_8.5.88/8082 TOMCAT_2_HOME_8_5_88=/usr/local/services/tomcat_8.5.88/8082 export CATALINA_2_BASE_8_5_88 CATALINA_2_HOME_8_5_88 TOMCAT_2_HOME_8_5_88 ##########second tomcat########## ##########third tomcat########## CATALINA_3_BASE_8_5_88=/usr/local/services/tomcat_8.5.88/8083 CATALINA_3_HOME_8_5_88=/usr/local/services/tomcat_8.5.88/8083 TOMCAT_3_HOME_8_5_88=/usr/local/services/tomcat_8.5.88/8083 export CATALINA_3_BASE_8_5_88 CATALINA_3_HOME_8_5_88 TOMCAT_3_HOME_8_5_88 ##########third tomcat########## ##########fourth tomcat########## CATALINA_4_BASE_8_5_88=/usr/local/services/tomcat_8.5.88/8084 CATALINA_4_HOME_8_5_88=/usr/local/services/tomcat_8.5.88/8084 TOMCAT_4_HOME_8_5_88=/usr/local/services/tomcat_8.5.88/8084 export CATALINA_4_BASE_8_5_88 CATALINA_4_HOME_8_5_88 TOMCAT_4_HOME_8_5_88 ##########fourth tomcat##########
使配置文件生效
验证配置文件
echo $CATALINA_1_BASE_8_5_88
修改Tomcat配置项
如果新服务器中从未安装过Tomcat则第一个8081不需要修改
如果新服务器中已存在旧Tomcat,则为了避免CataLina的环境变量冲突,8081也需要进行修改
vim
打开catalina.sh
文件执行以下命令全局替换
8081
:%s/CATALINA_BASE/CATALINA_1_BASE_8_5_88/g :%s/CATALINA_HOME/CATALINA_1_HOME_8_5_88/g
8082
:%s/CATALINA_BASE/CATALINA_2_BASE_8_5_88/g :%s/CATALINA_HOME/CATALINA_2_HOME_8_5_88/g
8083
:%s/CATALINA_BASE/CATALINA_3_BASE_8_5_88/g :%s/CATALINA_HOME/CATALINA_3_HOME_8_5_88/g
8084
:%s/CATALINA_BASE/CATALINA_4_BASE_8_5_88/g :%s/CATALINA_HOME/CATALINA_4_HOME_8_5_88/g
配置多Tomcat的setenv.sh
修改setenv.sh
8081
CATALINA_PID="$CATALINA_1_BASE_8_5_88/tomcat.pid"
8082
CATALINA_PID="$CATALINA_2_BASE_8_5_88/tomcat.pid"
8083
CATALINA_PID="$CATALINA_3_BASE_8_5_88/tomcat.pid"
8084
CATALINA_PID="$CATALINA_4_BASE_8_5_88/tomcat.pid"
配置多Tomcat的端口 修改端口
### 示例:8082 修改端口 ### #修改关闭端口(原8015): <Server port="8025" shutdown="SHUTDOWN" ... > #修改访问端口(原8081): <Connector port="8082" ... > #修改监听端口(AJP默认是注释关闭的、不用修改): #<Connector port="8011" protocol="AJP/1.3" ... >
迁移部署新环境 搭建环境VM虚拟机中,需要迁移已配置好到生产环境部署
迁移Tomcat旧环境准备 压缩Tomcat
环境
tar -zvcf tomcat_8.5.88.tar.gz tomcat_8.5.88
解压缩
tar -zxvf tomcat_8.5.88.tar.gz (-C 指定目录 )
上传至新服务器环境
scp命令传文件
#scp【本地文件的路径】【服务器用户名】@【服务器地址】:【服务器上存放文件的路径】 scp tomcat_8.5.88.tar.gz root@192.168.116.129:/root/
迁移Tomcat新环境部署 创建部署目录service
mkdir -p /usr/local/services/
移动tomcat环境压缩包并解压
#移动 mv /root/tomcat_8.5.88.tar.gz ./ #解压 tar -zxvf tomcat_8.5.88.tar.gz
检查目录是否与原tomcat服务器环境一致
#pwd /usr/local/services/tomcat_8.5.88
配置Tomcat的环境变量点击跳转
配置日志分割 点击这里跳转指定位置
配置系统启动 点击这里跳转指定位置
配置GC日志 JDK8打印并分析GC日志
详解可参考博客文档信息
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseSerialGC -Xmx1m -Xloggc:./gc-serial.log
参数 功能 -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的详细日志 -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式) -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800) -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息 -Xloggc:gc.log 日志文件的输出路径
注意事项 自动部署已关闭 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="false">
创建gcLog日志目录 setenv.sh的配置gclog的路径可修改
如果有设gc日志打印输出则需要配置gc日志目录
#示例:Tomcat8081 mkdir -p /usr/local/services/tomcat_8.5.88/8081/logs/gclogs
Tomcat配置定时重启 Linux操作系统用crontab做定时关闭启动tomcat
查看crontab任务是否执行以及执行日志
crontab报错:errors in crontab file, can’t install
cron
定时任务配置
打印定时任务日志输出
11月30日11时51分执行任务
51 11 30 11 * /bin/sh /opt/sh_file/tomcat.sh >> /var/log/tomcat_sh.log 2>&1
Tomcat.sh
脚本
#!/bin/sh #./etc/profile #防止cron定时执行由于无java环境导致失败情况 export JAVA_HOME=/opt/jdk/jdk1.8.0_151 sh /usr/local/services/tomcat_8.5.88/8081/bin/shutdown.sh sleep 30s sh /usr/local/services/tomcat_8.5.88/8081/bin/startup.sh
注意:setenv.sh
文件中最好也配置下Java环境变量路径,防止以service服务方式启动tomcat失败情况。
Tomcat9.0.83版本升级 Tomcat9 升级注意事项 配置文件server.xml
变更项:
#compressableMimeType Tomcat9.0以前参数配置项 compressibleMimeType
连接池Executor
配置项需变更
#以下配置需移除 maxSpareThreads prestartminSpareThreads
写在最前面的话 前言:将打包好环境迁移部署其他服务器时,需要注意以下几点 :
配置etc/profile
环境变量 cron
的定时任务firewalld
防火墙环境变量 /etc/profile
此处示例仅9091
,其余9092-9094
的tomcat容器可自行参照博客配置
【完整配置示例请滚动到底部查看(包括9091-9094)】
CATALINA_1_BASE_9_0_83=/usr/local/services/tomcat_9.0.83/9091/ CATALINA_1_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9091/ TOMCAT_1_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9091/ export CATALINA_1_BASE_9_0_83 CATALINA_1_HOME_9_0_83 TOMCAT_1_HOME_9_0_83
bin目录下环境配置setenv.sh
若打印gc日志,需要提前创建gc日志目录
JAVA_HOME=/opt/jdk/jdk1.8.0_151 CATALINA_PID="$CATALINA_1_BASE_9_0_83/tomcat.pid" JAVA_OPTS="-server -Xms7168m -Xmx7168m -Xmn2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -XX:ReservedCodeCacheSize=1024M -XX:SurvivorRatio=8 -Djava.io.tmpdir=/tmp -Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Dfile.encoding=UTF-8 -XX:+AggressiveOpts -XX:+TieredCompilation -XX:+UseCompressedOops -XX:+UseBiasedLocking -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled -XX:CMSInitiatingOccupancyFraction=75 -XX:+PrintCommandLineFlags -XX:+HeapDumpOnOutOfMemoryError -XX:CMSFullGCsBeforeCompaction=2 -XX:SoftRefLRUPolicyMSPerMB=1000 -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -Xloggc:../logs/gclogs/gc.$$.log -Djava.library.path=/usr/local/apr/lib -javaagent:/usr/local/services/tomcat_9.0.83/9091/jspAgent/JSPAgent.jar";
替换catalina.sh
在vim
中按:
号后输入以下命令全局替换
CATALINA_BASE
%s/CATALINA_BASE/CATALINA_1_BASE_9_0_83/g
CATALINA_HOME
%s/CATALINA_HOME/CATALINA_1_HOME_9_0_83/g
配置apr
,针对tomcat版本的tomcat-native
配置
修改server.xml
配置文件
配置日志脚本back_catalina_out.sh
启动,观察日志是否报错
后续9092 - 9094
的容器需要配置拓展
以9091
为模板复制多个容器9092-9094
修改setenv.sh
的CATALINA_PID
替换catalina.sh
的CATALINA_BASE
和CATALINA_HOME
修改back_catalina_out
的目录配置 修改server.xml
的端口配置 启动验证是否启动成功 补充配置项参数
开启防火墙
继续往后滑,有相关代码直接执行命令
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="x.x.x.x" port protocol="tcp" port="9091" accept" firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="x.x.x.x" port protocol="tcp" port="9092" accept" firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="x.x.x.x" port protocol="tcp" port="9093" accept" firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="x.x.x.x" port protocol="tcp" port="9094" accept"
Tomcat的环境变量
CATALINA_1_BASE_9_0_83=/usr/local/services/tomcat_9.0.83/9091/ CATALINA_1_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9091/ TOMCAT_1_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9091/ export CATALINA_1_BASE_9_0_83 CATALINA_1_HOME_9_0_83 TOMCAT_1_HOME_9_0_83 CATALINA_2_BASE_9_0_83=/usr/local/services/tomcat_9.0.83/9092/ CATALINA_2_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9092/ TOMCAT_2_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9092/ export CATALINA_2_BASE_9_0_83 CATALINA_2_HOME_9_0_83 TOMCAT_2_HOME_9_0_83 CATALINA_3_BASE_9_0_83=/usr/local/services/tomcat_9.0.83/9093/ CATALINA_3_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9093/ TOMCAT_3_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9093/ export CATALINA_3_BASE_9_0_83 CATALINA_3_HOME_9_0_83 TOMCAT_3_HOME_9_0_83 CATALINA_4_BASE_9_0_83=/usr/local/services/tomcat_9.0.83/9094/ CATALINA_4_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9094/ TOMCAT_4_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9094/ export CATALINA_4_BASE_9_0_83 CATALINA_4_HOME_9_0_83 TOMCAT_4_HOME_9_0_83
LogPath环境变量
Tomcat_LOGPATH_9091=/usr/local/services/tomcat_9.0.83/9091/logs Tomcat_LOGPATH_9092=/usr/local/services/tomcat_9.0.83/9092/logs Tomcat_LOGPATH_9093=/usr/local/services/tomcat_9.0.83/9093/logs Tomcat_LOGPATH_9094=/usr/local/services/tomcat_9.0.83/9094/logs export Tomcat_LOGPATH_9091 Tomcat_LOGPATH_9092 Tomcat_LOGPATH_9093 Tomcat_LOGPATH_9094
定时任务配置
crontab -e
打开定时配置
老版本定时任务配置
0 0 * * * /usr/local/services/tomcat_9.0.83/9091/bin/back_catalina_out.sh 0 0 * * * /usr/local/services/tomcat_9.0.83/9092/bin/back_catalina_out.sh 0 0 * * * /usr/local/services/tomcat_9.0.83/9093/bin/back_catalina_out.sh 0 0 * * * /usr/local/services/tomcat_9.0.83/9094/bin/back_catalina_out.sh
新版本定时任务配置(脚本文件启用了环境变量)
0 0 * * * . /etc/profile;/bin/sh /usr/local/services/tomcat_9.0.83/9091/bin/back_catalina_out.sh 0 0 * * * . /etc/profile;/bin/sh /usr/local/services/tomcat_9.0.83/9092/bin/back_catalina_out.sh 0 0 * * * . /etc/profile;/bin/sh /usr/local/services/tomcat_9.0.83/9093/bin/back_catalina_out.sh 0 0 * * * . /etc/profile;/bin/sh /usr/local/services/tomcat_9.0.83/9094/bin/back_catalina_out.sh
Tomcat的catalina替换命令
由于是通过9091
复制出来的,命令如下(在vim
中按:
):
9092
%s/CATALINA_1_BASE_9_0_83/CATALINA_2_BASE_9_0_83/g
%s/CATALINA_1_HOME_9_0_83/CATALINA_2_HOME_9_0_83/g
9093
%s/CATALINA_1_BASE_9_0_83/CATALINA_3_BASE_9_0_83/g
%s/CATALINA_1_HOME_9_0_83/CATALINA_3_HOME_9_0_83/g
9094
%s/CATALINA_1_BASE_9_0_83/CATALINA_4_BASE_9_0_83/g
%s/CATALINA_1_HOME_9_0_83/CATALINA_4_HOME_9_0_83/g
防火墙添加放行端口命令Firewall
防火墙命令
开放允许指定IP+端口访问
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="xx.xxx.x.25" port protocol="tcp" port="9091" accept" && firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="xx.xxx.x.25" port protocol="tcp" port="9092" accept" && firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="xx.xxx.x.25" port protocol="tcp" port="9093" accept" && firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="xx.xxx.x.25" port protocol="tcp" port="9094" accept" && firewall-cmd --reload && firewall-cmd --zone=public --list-rich-rules
开放指定端口访问
firewall-cmd --zone=public --add-port=9091/tcp --permanent && firewall-cmd --zone=public --add-port=9092/tcp --permanent && firewall-cmd --zone=public --add-port=9093/tcp --permanent && firewall-cmd --zone=public --add-port=9094/tcp --permanent && firewall-cmd --reload && firewall-cmd --zone=public --list-ports
iptables
/sbin/iptables -I INPUT -s xx.xxx.x.25 -p tcp --dport 9091 -j ACCEPT && /sbin/iptables -I INPUT -s xx.xxx.x.25 -p tcp --dport 9092 -j ACCEPT && /sbin/iptables -I INPUT -s xx.xxx.x.25 -p tcp --dport 9093 -j ACCEPT && /sbin/iptables -I INPUT -s xx.xxx.x.25 -p tcp --dport 9094 -j ACCEPT && /sbin/iptables -I INPUT -s xx.xxx.x.29 -p tcp --dport 9091 -j ACCEPT && /sbin/iptables -I INPUT -s xx.xxx.x.29 -p tcp --dport 9092 -j ACCEPT && /sbin/iptables -I INPUT -s xx.xxx.x.29 -p tcp --dport 9093 -j ACCEPT && /sbin/iptables -I INPUT -s xx.xxx.x.29 -p tcp --dport 9094 -j ACCEPT
service iptables save && service iptables restart && cat /etc/sysconfig/iptables
一键部署配置命令 #!/bin/bash #desc 一键部署tomcat环境 #author muyh #date 2024/04/20 # 指定要下载的 URL url="YOUR_URL_HERE" # 指定要保存文件的目录 directory="/usr/local/services" # 检查目录是否存在,如果不存在则创建 if [ ! -d "$directory" ]; then mkdir -p "$directory" fi # 使用 wget 下载文件到指定目录 # wget -P "$directory" "$url" wget -P "$directory" "$url" --no-check-certificate || { echo "下载失败,脚本中止执行"; exit 1; } # 获取下载的文件名 filename=$(basename "$url") # 切换到目标目录 cd "$directory" || exit # 解压缩文件 if [[ "$filename" == *.zip ]]; then unzip "$filename" elif [[ "$filename" == *.tar.gz || "$filename" == *.tgz ]]; then tar xvzf "$filename" elif [[ "$filename" == *.tar.bz2 || "$filename" == *.tbz2 ]]; then tar xvjf "$filename" else echo "Unsupported file format for extraction: $filename" fi # 赋予执行权限给特定文件夹下的所有 .sh 文件 for folder in "$directory/$filename"*/; do if [ -d "$folder" ]; then if [ -n "$(find "$folder" -maxdepth 1 -type f -name '*.sh')" ]; then chmod u+x "${folder}"*.sh > /dev/null 2>&1 fi fi done # 添加命令语句到 /etc/profile # echo '# Add your command here' >> /etc/profile echo 'CATALINA_1_BASE_9_0_83=/usr/local/services/tomcat_9.0.83/9091/' >> /etc/profile echo 'CATALINA_1_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9091/' >> /etc/profile echo 'TOMCAT_1_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9091/' >> /etc/profile echo 'export CATALINA_1_BASE_9_0_83 CATALINA_1_HOME_9_0_83 TOMCAT_1_HOME_9_0_83' >> /etc/profile echo 'CATALINA_2_BASE_9_0_83=/usr/local/services/tomcat_9.0.83/9092/' >> /etc/profile echo 'CATALINA_2_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9092/' >> /etc/profile echo 'TOMCAT_2_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9092/' >> /etc/profile echo 'export CATALINA_2_BASE_9_0_83 CATALINA_2_HOME_9_0_83 TOMCAT_2_HOME_9_0_83' >> /etc/profile echo 'CATALINA_3_BASE_9_0_83=/usr/local/services/tomcat_9.0.83/9093/' >> /etc/profile echo 'CATALINA_3_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9093/' >> /etc/profile echo 'TOMCAT_3_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9093/' >> /etc/profile echo 'export CATALINA_3_BASE_9_0_83 CATALINA_3_HOME_9_0_83 TOMCAT_3_HOME_9_0_83' >> /etc/profile echo 'CATALINA_4_BASE_9_0_83=/usr/local/services/tomcat_9.0.83/9094/' >> /etc/profile echo 'CATALINA_4_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9094/' >> /etc/profile echo 'TOMCAT_4_HOME_9_0_83=/usr/local/services/tomcat_9.0.83/9094/' >> /etc/profile echo 'export CATALINA_4_BASE_9_0_83 CATALINA_4_HOME_9_0_83 TOMCAT_4_HOME_9_0_83' >> /etc/profile echo 'Tomcat_LOGPATH_9091=/usr/local/services/tomcat_9.0.83/9091/logs' >> /etc/profile echo 'Tomcat_LOGPATH_9092=/usr/local/services/tomcat_9.0.83/9092/logs' >> /etc/profile echo 'Tomcat_LOGPATH_9093=/usr/local/services/tomcat_9.0.83/9093/logs' >> /etc/profile echo 'Tomcat_LOGPATH_9094=/usr/local/services/tomcat_9.0.83/9094/logs' >> /etc/profile echo 'export Tomcat_LOGPATH_9091 Tomcat_LOGPATH_9092 Tomcat_LOGPATH_9093 Tomcat_LOGPATH_9094' >> /etc/profile # 加载 /etc/profile source /etc/profile # 检查 iptables 是否启动 ### iptables此处执行可能失效 ### if systemctl is-active --quiet iptables; then echo "iptables 防火墙已启动" # 执行 iptables 相关命令 # 在这里添加你想要执行的 iptables 命令 /sbin/iptables -I INPUT -s xx.xxx.x.25 -p tcp --dport 9091 -j ACCEPT && /sbin/iptables -I INPUT -s xx.xxx.x.25 -p tcp --dport 9092 -j ACCEPT && /sbin/iptables -I INPUT -s xx.xxx.x.25 -p tcp --dport 9093 -j ACCEPT && /sbin/iptables -I INPUT -s xx.xxx.x.25 -p tcp --dport 9094 -j ACCEPT && /sbin/iptables -I INPUT -s xx.xxx.x.29 -p tcp --dport 9091 -j ACCEPT && /sbin/iptables -I INPUT -s xx.xxx.x.29 -p tcp --dport 9092 -j ACCEPT && /sbin/iptables -I INPUT -s xx.xxx.x.29 -p tcp --dport 9093 -j ACCEPT && /sbin/iptables -I INPUT -s xx.xxx.x.29 -p tcp --dport 9094 -j ACCEPT && service iptables save && service iptables restart && cat /etc/sysconfig/iptables fi # 检查 firewalld 是否启动 if systemctl is-active --quiet firewalld; then echo "firewalld 防火墙已启动" # 执行 firewalld 相关命令 # 在这里添加你想要执行的 firewalld 命令 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="xx.xxx.x.25" port protocol="tcp" port="9091" accept" && firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="xx.xxx.x.25" port protocol="tcp" port="9092" accept" && firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="xx.xxx.x.25" port protocol="tcp" port="9093" accept" && firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="xx.xxx.x.25" port protocol="tcp" port="9094" accept" && firewall-cmd --reload && firewall-cmd --zone=public --list-rich-rules fi # 添加定时任务到 crontab (crontab -l ; echo "0 0 * * * . /etc/profile;/bin/sh /usr/local/services/tomcat_9.0.83/9091/bin/back_catalina_out.sh") | crontab - (crontab -l ; echo "0 0 * * * . /etc/profile;/bin/sh /usr/local/services/tomcat_9.0.83/9092/bin/back_catalina_out.sh") | crontab - (crontab -l ; echo "0 0 * * * . /etc/profile;/bin/sh /usr/local/services/tomcat_9.0.83/9093/bin/back_catalina_out.sh") | crontab - (crontab -l ; echo "0 0 * * * . /etc/profile;/bin/sh /usr/local/services/tomcat_9.0.83/9094/bin/back_catalina_out.sh") | crontab - base_dir="$directory" # 检查基础目录是否存在 if [ ! -d "$base_dir" ]; then echo "Base directory '$base_dir' not found." exit 1 fi # 获取当前系统的 JAVA_HOME 值 java_home=$(echo $JAVA_HOME) # 查找所有 Tomcat 目录并修改其中的 setenv.sh 文件 # -maxdepth 2 检索深度2 # -name "90*" 目录文件名前缀90开头 find "$base_dir" -maxdepth 2 -type d -name "90*" | while IFS= read -r tomcat_dir; do setenv_file="$tomcat_dir/bin/setenv.sh" if [ -f "$setenv_file" ]; then # 替换 setenv.sh 文件中的 JAVA_HOME 变量 # sed -i "s|^#* *export *JAVA_HOME=.*|export JAVA_HOME=\"$java_home\"|g" "$setenv_file" # update 2024/07/01 发现存在失效情况! # 注释掉现有的 JAVA_HOME 配置 sed -i 's/^JAVA_HOME=.*$/#&/' "$setenv_file" # 添加新的 JAVA_HOME 配置 echo "JAVA_HOME=$java_home" >> "$setenv_file" echo "JAVA_HOME in $setenv_file has been replaced with $java_home" else echo "setenv.sh not found in $tomcat_dir" fi done echo "脚本命令执行完毕!"