Linux升级Tomcat版本,tomcat8.5.34升级到tomcat9.0.43
1.下载你要升级的Tomcat版本:
https://tomcat.apache.org/download-90.cgi
2.停止tomcat
ps -ef | grep tomcat
kill -9 pid
3.备份旧的tomcat
cp -rf tomcat8.5.34 tomcat8.5.34_bak
4.解压新的tomcat
tar -zxvf apache-tomcat-9.0.43.tar.gz
删除原来的tomcat8.5.1
rm -rf tomcat8.5.34
重命名为:
mv apache-tomcat-9.0.43 tomcat8.5.34
注意:此时tomcat8.5.34就是新的了
5.把旧的server.xml移动到新的server.xml
cp tomcat8.5.34_bak/conf/server.xml tomcat8.5.34/conf/
6.把旧的webapps移动到新的webapps下
先删除新的webapps文件:
cd tomcat8.5.34/webapps
rm -rf *
移动:
cp -rp tomcat8.5.34_bak/webapps/* tomcat8.5.34/webapps/
修改了旧tomcat的某个文件,一定要复制或移动到新tomcat下:
cp tomcat8.5.34_bak/conf/catalina.sh tomcat8.5.34/conf/
7.遇到问题:
1.java.lang.IllegalArgumentException: The AJP Connector is configured with secretRequired="true" but the secret attribute is either null or "".
启动发现 Tomcat 长时间没办法启动,观察日志,发现如下错误信息:
08-Feb-2021 22:09:23.792 SEVERE [main] org.apache.catalina.util.LifecycleBase.handleSubClassException Failed to start component [Connector[AJP/1.3-8009]]
org.apache.catalina.LifecycleException: Protocol handler start failed
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1038)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:438)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478)
Caused by: java.lang.IllegalArgumentException: The AJP Connector is configured with secretRequired="true" but the secret attribute is either null or "". This combination is not valid.
at org.apache.coyote.ajp.AbstractAjpProtocol.start(AbstractAjpProtocol.java:264)
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1035)
... 12 more
这个是由于在升级系统的时候,选择保留老版本的配置文件,这样就导致,如果 Tomcat 配置了通过 AJP 方式与Apache通信的情况下,会报告上面的错误信息。
新增 secretRequired 的目的是为了解决 AJP 端口暴露在公网的情况下,存在 AJP File Read/Inclusion in Apache Tomcat (CVE-2020-1938) and Undertow (CVE-2020-1745) 漏洞,由于 Tomcat AJP 协议设计上存在缺陷,攻击者通过 Tomcat AJP Connector 可以读取或包含 Tomcat 上所有 webapp 目录下的任意文件,例如可以读取 webapp 配置文件或源代码。此外在目标应用有文件上传功能的情况下,配合文件包含的利用还可以达到远程代码执行的危害。
连接方必须在连接的时候,传入正确的 secretRequired 才能与 Tomcat 通信,相当于通信需要的密码了。
解决办法:
修改 server.xml:
<Connector port="8009" protocol="AJP/1.3" address="127.0.0.1" redirectPort="8443" secretRequired=""/>
参考连接:
https://www.nuomiphp.com/eplan/82819.html
2.启动tomcat对比版本不对
解决:
到bin下的setclasspath.sh,在文件的开始处添加如下代码:
export JAVA_HOME=/usr/java/jdk1.8.0_112
export JRE_HOME=/usr/java/jdk1.8.0_112/jre