(111)连接被拒绝-Apache反向代理和Tomcat 8.5.51-Docker Compose

时间:2020-03-10 20:24:14

标签: apache docker tomcat docker-compose ajp

这适用于Tomcat 8.5.50。但是,对于Tomcat 8.5.51,Apache无法通过AJP连接,并出现以下错误:

[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

Apache的版本为2.4.38

Server version: Apache/2.4.38 (Debian)
Server built:   2019-10-15T19:53:42

server.xml中的AJP连接器具有secretRequired="false"。一切都通过Docker Compose设置。

3 个答案:

答案 0 :(得分:2)

secretRequired的配置不是唯一更改的内容:

来自https://tomcat.apache.org/migration-85.html#Upgrading_8.5.x

  • 从8.5.51开始,AJP连接器的默认监听地址已更改为环回地址,而不是所有地址。
  • 从8.5.51开始,已弃用AJP连接器的requiredSecret属性,并由secret属性代替。
  • 从8.5.51开始,secretRequired属性已添加到AJP连接器。如果设置为true(默认),则AJP连接器不会 除非已指定秘密,否则开始。
  • 从8.5.51开始,allowedRequestAttributesPattern属性已添加到AJP连接器。具有无法识别的属性的请求 现在将被403阻止。

参考:AJP connector

最重要的是,股票server.xml甚至带有AJPConnector注释,因此,如果未显式启用它,它将不会处于活动状态。

答案 1 :(得分:0)

尝试将allowedRequestAttributesPattern=".*"添加到连接器定义中。

答案 2 :(得分:0)

从 Olaf 停止的地方继续,按照以下步骤操作:

(1) 您可以省略 address 属性。

(2) 将 secretRequired 属性更改为 secretRequired="true",或者等效地将其省略。 (默认值为 True)。

(3) 向 secret 文件和 server.xml 文件添加 workers.properties 属性。你可以选择你想要的任何秘密,条件是两个文件中的值完全匹配。

(4) 暂时将属性 allowedRequestAttributesPattern=".*" 添加到 AJP 连接器,正如 T Cervenka 建议的那样。

然后你应该得到类似的东西

workers.properties

worker.list=worker1

worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009

worker.worker1.secret=F45A93BF-3AA7-4CB4-E49A-DB34573E4A25

server.xml

<Connector port="8009" protocol="AJP/1.3" maxThreads="500" secret="F45A93BF-3AA7-4CB4-E49A-DB34573E4A25" allowedRequestAttributesPattern=".*" />

allowedRequestAttributesPattern 的值必须是正则表达式。它表示从反向代理传递到 AJP 连接器的请求属性。有关详细信息,请参阅 Tomcat 文档。 https://tomcat.apache.org/tomcat-8.5-doc/config/ajp.html

allowedRequestAttributesPattern 的正则表达式值必须与 AJP 协议中传递的请求属性完全匹配。它的默认值(您没有提及该属性)为 null:已知这会中断请求。如果有疑问,请使用正则表达式通配符“.*”,如上所述。