Tengo un servidor tomcat 8 con Apache 2 (2.4.25) en el sistema debian 9.12 (stretch) y estoy usando un conector ajp entre apache2 y tomcat. La versión de JDK es Oracle JDK 1.8.0_252-8u252-b09-1~deb9u1-b09. Todo funcionaba bien hasta que tomcat8 se actualizó automáticamente a 8.5.54. Pero ahora, al acceder a la aplicación a través de ajp, hay un error de puerta de enlace de tiempo de espera 504.
El servidor tomcat8 se actualizó automáticamente esta mañana.
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:52Nada cambió en el archivo de configuración de apache2 y tomcat8. Todavía puedo acceder a la interfaz del administrador de Tomcat y puedo ver mis aplicaciones ejecutándose. Puedo acceder a las aplicaciones de tomcat con localhost, pero no a través del servidor apache2.
Por ejemplo, tengo la aplicación QCM1 implementada en el servidor tomcat8. Si realizo el siguiente comando wget
wget http://localhost:8080/QCM1la respuesta es correcta, pero cuando realizo
wget http://myserve.mydomain.fr/QCM1hay un error de tiempo de espera de puerta de enlace 504
Para habilitar la redirección de la solicitud HTTP al servidor tomcat, existe la siguiente directiva en el archivo de configuración de apache2 (esa directiva funcionaba correctamente antes de la actualización de tomcat8)
ProxyPass /QCM1 ajp://localhost:8009/QCM1¿Qué me estoy perdiendo? Gracias por tu ayuda.
Finalmente encontré una solución, el seguimiento de la pila del error fue:
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) una solución para solucionar este problema fue cambiar la configuración del conector AJP en el archivo server.xml y agregar un atributo secretRequired como sugirió Jainender Chauhan en su respuesta a Springboot: el conector AJP está configurado con secretRequired="true" pero el el atributo secreto es nulo o "" después de la actualización a 2.2.5
<Connector protocol="AJP/1.3" port="8009" redirectPort="8443" secretRequired="false" />Funciona bien. Pero no estoy seguro de que sea la mejor y más segura forma de proceder.