Esto funciona con Tomcat 8.5.50 . Sin embargo, con Tomcat 8.5.51 , Apache no puede conectarse a través de AJP con el siguiente error:
[Tue Mar 10 20:15:31.378937 2020] [proxy:error] [pid 42:tid 139841308157696] (111)Connection refused: AH00957: AJP: attempt to connect to 172.28.0.5:8009 (tomcatserver) failed [Tue Mar 10 20:15:31.379336 2020] [proxy_ajp:error] [pid 42:tid 139841308157696] [client 192.168.0.1:58054] AH00896: failed to make connection to backend: tomcatserver El Apache está en la versión 2.4.38 :
Server version: Apache/2.4.38 (Debian) Server built: 2019-10-15T19:53:42 El conector AJP en server.xml tiene secretRequired="false" . Todo se configura a través de Docker Compose.
La configuración de secretRequired no es lo único que cambió:
De https://tomcat.apache.org/migration-85.html#Upgrading_8.5.x
- A partir de la versión 8.5.51, la dirección de escucha predeterminada del conector AJP se cambió a la dirección de bucle invertido en lugar de a todas las direcciones.
- A partir de la versión 8.5.51, el atributo requiredSecret del conector AJP quedó en desuso y se reemplazó por el atributo secret.
- A partir de la versión 8.5.51, se agregó el atributo secretRequired al conector AJP. Si se establece en verdadero, el valor predeterminado, AJP Connector no se iniciará a menos que se haya especificado un secreto.
- A partir de la versión 8.5.51, se agregó el atributo allowRequestAttributesPattern al conector AJP. Las solicitudes con atributos no reconocidos ahora se bloquearán con un 403.
Referencia: conector AJP .
Además de eso, el stock server.xml incluso tiene el AJPConnector comentado, por lo que no estará activo sin estar explícitamente habilitado.
Intente agregar allowedRequestAttributesPattern=".*" a la definición del conector.
Partiendo de donde lo dejó Olaf, sigue estos pasos:
(1) Puede omitir el atributo de address .
(2) Cambie el atributo secretRequired a secretRequired="true" o, de manera equivalente, déjelo fuera. (El valor por defecto es verdadero).
(3) Agregue un atributo secret al archivo workers.properties y al archivo server.xml. Puede elegir el secreto que desee, con la condición de que los valores de ambos archivos coincidan exactamente.
(4) Por el momento, agregue al conector AJP el atributo allowedRequestAttributesPattern=".*" , como sugiere T Cervenka.
Entonces deberías terminar con algo como,
trabajadores.propiedades
worker.list=worker1 worker.worker1.type=ajp13 worker.worker1.host=localhost worker.worker1.port=8009 worker.worker1.secret=F45A93BF-3AA7-4CB4-E49A-DB34573E4A25servidor.xml
<Connector port="8009" protocol="AJP/1.3" maxThreads="500" secret="F45A93BF-3AA7-4CB4-E49A-DB34573E4A25" allowedRequestAttributesPattern=".*" />
El valor de allowedRequestAttributesPattern debe ser una expresión regular. Representa los atributos de solicitud pasados del proxy inverso al conector AJP. Consulte los documentos de Tomcat para obtener más información. https://tomcat.apache.org/tomcat-8.5-doc/config/ajp.html .
El valor de expresión regular para allowedRequestAttributesPattern debe ser una coincidencia exacta para los atributos de solicitud pasados en el protocolo AJP. Su valor predeterminado (donde no menciona el atributo) es nulo: se sabe que esto interrumpe las solicitudes. En caso de duda, utilice el comodín regex, ".*", como se indicó anteriormente.