tomcat版本升级 org.apache.coyote.AbstractProcessor parseHost 信息: [\] 是无效主机注意:更多的请求解析错误

旧城冷巷雨未停 提交于 2020-12-14 15:15:03

1、年底客户一般会批量扫描服务器漏洞信息,最近客户反馈说我公司的Tomcat存在漏洞,漏洞情况如下:

从上图可知,只有升级至7.0.104版本以上才能解决漏洞:

通过http://blog.nsfocus.net/网站输入漏洞编号来查询相关漏洞及其处理方式。

[root@32 bin]# sh version.sh 
Using CATALINA_BASE2:   /usr/local/tomcat
Using CATALINA_HOME2:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk/
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.79
Server built:   Jun 26 2017 16:25:20 UTC
Server number:  7.0.79.0
OS Name:        Linux
Architecture:   amd64
JVM Version:    1.7.0_56-b13
JVM Vendor:     Oracle Corporation

本次我们升级至7.0.106版本。本次是小版本升级。

需要去官网下载tomcat版本。  官网地址:https://tomcat.apache.org/download-70.cgi

下周后传送到linux服务器上并解压:

[root@32 src]# ls
tomcat7.0.106.tar.gz
[root@32 src]# tar zxvf tomcat7.0.106.tar.gz

注释:tomcat版本升级有两种方式:

一是把tomcat新版本  tomcat/lib     bin     这两个个目录复制到新版本的目录下,然后启动既可。

二是把tomcat旧版本的 conf目录及相关的war拷贝到目录下,因为需要用到conf目录下server.xml文件。然后启动即可。

[root@cbmp-33 conf]# ls
catalina.policy        tomcat-users.xml        catalina.properties  logging.properties                          
Catalina        context.xml                    server.xml        web.xml

server.xml             系统启动加载核心文件,里面有网站模块这些信息。

tomcat-users.xml        tomcat 管理站点,默认是8080,看war包是否正常启动等。

[root@cbmp-32 conf]# tail tomcat-users.xml 
-->
  <role rolename="manager"/>
  <role rolename="tomcat"/>
  <role rolename="probeuser"/>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <user username="tocmat" password="tomcat" roles="manager-script,manager-gui,tomcat,manager,probeuser,poweruserplus,poweruser"/>
</tomcat-users>

拷贝并替换需要升级的目录:                   需要先备份原先的bin和lib目录

[root@cbmp-33 tomcat]# mv bin bin_2020_12_14                #原来bin需要备份
[root@cbmp-33 tomcat]# mv lib lib_2020_12_14                #原来lib需要备份
[root@cbmp-33 tomcat]# cd /usr/local/src
[root@cbmp-33 src]# mv tomcat tocmat7.0.106
[root@cbmp-33 src]# cp tomcat7.0.106     /usr/local/
[root@cbmp-33 src]# cd /usr/local/tomcat7_106/
[root@cbmp-33 tomcat7_106]# cp bin  lib  /usr/lccal/tomcat/

启动tomcat,普通用户来启动:

[root@32 tomcat7_106]# sudo su - tomcat -c '/usr/local/tomcat/bin/startup.sh'
############
需要的配置如下:
/usr/sbin/usermod -L tomcat
chown -R tomcat:tomcat /usr/local/tomcat

启动时发现有提示报错:Failed to start connector [Connector[AJP/1.3-8009]]
org.apache.catalina.LifecycleException: service.getName(): "Catalina";  协议处理器启动失败

看启动是启动连接AJP协议失败:修改 conf/server.xml配置文件:把以下内容注释掉,再次启动。

[root@32 conf]# vim server.xml
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /-->

再次重新启动:

看日记发现所有war都已经部署完成了,HA负载两台服务器上的war包,发现ha上的war包状态并没有起来。

查看catalina.out的日记报错信息如下:org.apache.coyote.AbstractProcessor parseHost
信息: [\] 是无效主机注意:更多的请求解析错误将以DEBUG级别日志进行记录。
java.lang.IllegalArgumentException

一直在不停的报这个错误。

需要先看war是不是正常都起来了。默认8080端口是显示的tomcat/webapps的目录,需要显示需要把war包放到这个目录下。

每个war都有自己的端口,也可以直接加端口来访问war,但是war的目录下要有probe这个war包才能正常显示的。如下:

证明war是正常启动的,况且再catalina.out日记里也显示war包部署完成。

在看ha的状态显示是不正常,也是ha无法正常负载的。

catalina.out日记里还是在报这个错误:org.apache.coyote.AbstractProcessor parseHost
信息: [\] 是无效主机注意:更多的请求解析错误将以DEBUG级别日志进行记录。
java.lang.IllegalArgumentException

一开始怎么也没想到查看HA的配置,一直在找tomcat的错误,尝试很多次,一直在报这个错误。因为旧版本的都是能正常使用的。

一直到网上找到这篇文件才想到了,链接如下:https://blog.csdn.net/miss_du/article/details/109502587

赶紧去查了HA的配置:也对比了和其他项目上的HA配置的区别,果然发现了问题:

#原来配置:
[root@32 logs]# cd /usr/local/haproxy/
[root@32 haproxy]# vim haproxy.cfg
  listen xxx模块 
        bind *:10002
        mode http
        balance roundrobin
        option httplog
        option dontlognull
        option httpchk GET /xxx模块/healthCheck HTTP/1.1\r\nHost:\
        http-check expect status 200
    # option httpchk GET /index.html
    server BOSS_1 1.1.1.1:10002 cookie 1 check inter 2000 rise 3 fall 3
    server BOSS_2 2.2.2.2:10002 cookie 2 check inter 2000 rise 3 fall 3
新的配置
[root@32 logs]# cd /usr/local/haproxy/
[root@32 haproxy]# vim haproxy.cfg
  listen xxx模块 
        bind *:10002
        mode http
        balance roundrobin
        option httplog
        option dontlognull
        option httpchk GET /xxx模块/healthCheck 
        http-check expect status 200
    # option httpchk GET /index.html
    server BOSS_1 1.1.1.1:10002 cookie 1 check inter 2000 rise 3 fall 3
    server BOSS_2 2.2.2.2:10002 cookie 2 check inter 2000 rise 3 fall 3

发现tomcat对  /  斜杠比较敏感。把HTTP/1.1\r\nHost:\这行去掉后,再重启tomcat即正常了,状态也起来。

一开始未曾往这方面想,一直百度错误org.apache.coyote.AbstractProcessor parseHost
信息: [\] 是无效主机注意:更多的请求解析错误将以DEBUG级别日志进行记录。

但未搜索到答案。

如果你也遇到相同的问题,需要能帮助到你哈。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!