我在debian 9.12(stretch)系统上有一个Apache 2(2.4.25)为前端的tomcat 8服务器,并且在apache2和tomcat之间使用了ajp连接器。 JDK版本是Oracle JDK 1.8.0_252-8u252-b09-1〜deb9u1-b09。一切正常,直到tomcat8自动更新到8.5.54。但是现在通过ajp访问应用程序时,出现504超时网关错误。

tomcat8服务器今天早上已自动更新

Start-Date: 2020-05-05  06:01:41
Commandline: /usr/bin/unattended-upgrade
Upgrade: libservlet3.1-java:amd64 (8.5.50-0+deb9u1, 8.5.54-0+deb9u1),
libtomcat8-java:amd64 (8.5.50-0+deb9u1, 8.5.54-0+deb9u1),
tomcat8-examples:amd64 (8.5.50-0+deb9u1, 8.5.54-0+deb9u1),
tomcat8-admin:amd64 (8.5.50-0+deb9u1, 8.5.54-0+deb9u1),
tomcat8-common:amd64 (8.5.50-0+deb9u1, 8.5.54-0+deb9u1), tomcat8:amd64
(8.5.50-0+deb9u1, 8.5.54-0+deb9u1), tomcat8-docs:amd64 (8.5.50-0+deb9u1,
8.5.54-0+deb9u1)
End-Date: 2020-05-05  06:01:52


apache2和tomcat8配置文件中没有任何更改。我仍然可以访问tomcat管理器界面,并且可以看到我的应用程序正在运行。我可以使用localhost访问tomcat应用程序,但不能通过apache2服务器访问。

例如,我将应用程序QCM1部署在tomcat8服务器上。如果我执行以下wget命令

wget http://localhost:8080/QCM1


响应是正确的,但是当我执行

wget http://myserve.mydomain.fr/QCM1


有504网关超时错误

要启用将HTTP请求重定向到tomcat服务器,在apache2配置文件中有以下伪指令(该伪指令在tomcat8更新之前正在运行)

ProxyPass /QCM1 ajp://localhost:8009/QCM1


我想念什么?
谢谢你的帮助。

最佳答案

最后,我找到了一个解决方案,该错误的堆栈跟踪为:

05-May-2020 16:29:01.292 GRAVE [main]
org.apache.catalina.core.StandardService.startInternal Failed to start connector [Connector[AJP/1.3-8009]]
org.apache.catalina.LifecycleException: Le démarrage du gestionnaire de protocole a échoué
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1086)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:440)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:766)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:688)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)


解决此问题的一种方法是更改​​server.xml文件中AJP连接器的配置,并按照Jainender Chauhan在对Springboot -The AJP Connector is configured with secretRequired="true" but the secret attribute is either null or "" after upgrade to 2.2.5的答复中的建议添加secretRequired属性。

<Connector protocol="AJP/1.3" port="8009" redirectPort="8443" secretRequired="false" />


它工作正常。但是我不确定这是最好,最安全的进行方法

关于java - AJP连接器和Tomcat 8.5.54之间的网关超时问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61614516/

10-09 04:43