收到带有签名的 Ajp 无效消息
Posted
技术标签:
【中文标题】收到带有签名的 Ajp 无效消息【英文标题】:Ajp invalid message received with signature 【发布时间】:2012-08-03 21:20:03 【问题描述】:我正在使用带有 Apache 2.2.22 modproxy 的 Tomcat 7.0.29。 在 httpd.conf 中将 Ajp 配置为协议,在 server.xml 中配置 AjpNioProtocol。 服务器启动后,日志中会显示以下消息:
严重:收到带有签名 20599 的无效消息 com.apache.coyote.ajp.AjpMessage processHeader
没有请求发送到 web 或 tomcat 服务器,它仍然会抛出该错误。 tomcat和apache的访问日志显示没有请求进来。 是什么导致了无效消息错误?
这是配置:
httpd.conf
ProxyPass /wl ajp:// ip : port /wl
ProxyPassReverse /wl ajp:// ip : port /wl
服务器.xml
<Connector port="port"
protocol="org.apache.coyote.ajp.AjpNioProtocol"
connectionTimeout="20000"
acceptorThreadCount="2"
maxThreads="1600"
redirectPort="8443" />
【问题讨论】:
这里是 server.xml -->发现其中一个内部进程正在调用该端口并发送 http 请求导致“无效消息..”错误。所以我最终为这些内部流程添加了一个额外的 http 连接器
【讨论】:
【参考方案2】:这也可能发生在两端的缓冲区大小不同时:日志提到无效的 AJP 消息并且浏览器收到 400
错误代码。
我已经修复了 Apache2 配置中 AJP connector 和 ProxyIOBufferSize
上的 packetSize
的情况。
在Tomcat中server.xml
:
<Connector protocol="AJP/1.3" port="8009"
connectionTimeout="20000"
packetSize="65536"
proxyName="yourproxy.domain.ltd" proxyPort="80"
/>
在 Apache2 mod_proxy_ajp configuration 中,添加语句 ProxyIOBufferSize 65536
。
【讨论】:
【参考方案3】:对我来说,问题很简单。我正在发送 HTTP 请求,但连接器配置了 AJP 协议。我在server.xml
中的连接器配置如下:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
但是当我把它改成这样的时候:
<Connector port="8009" protocol="HTTP/1.1" redirectPort="8443"/>
错误消失了。
希望这能帮助解决此错误的人。
【讨论】:
默认情况下,在 8080 等其他端口上配置了一个 HTTP 连接器。因此,与其使用 AJP 端口,不如将调用应用程序重新配置为不使用 HTTP 的 8009,而是使用另一个端口,例如8080 代替。这更好地遵循了标准约定。【参考方案4】:我今天收到了类似的消息:
Nov 18, 2016 4:25:00 PM org.apache.coyote.ajp.AjpMessage processHeader
SEVERE: Invalid message received with signature 65524
我的问题的根本原因是 selinux 没有让 apache 连接到 tomcat。对于这个错误是如何导致的,我有点困惑——我希望不会有任何联系,期间。最好的猜测,我可能尝试使用 telnet 手动连接到该端口。这样做肯定会发出类似的信息。
不管怎样,也许这个 selinux 提醒会对最终来到这里的其他人有所帮助。
【讨论】:
【参考方案5】:没有请求发送到 web 或 tomcat 服务器,它仍然会抛出该错误。 tomcat和apache的访问日志显示没有请求进来。是什么导致了invalid message错误?
只是给其他人一些提示,因为我不小心在我的一个配置中忘记了相同的内容:server.xml
中提到的Connector
正在全局监听,因为只指定了port
,没有任何address
。后者默认定义为全局监听:
默认情况下,此端口将用于与服务器关联的所有 IP 地址。
https://tomcat.apache.org/tomcat-7.0-doc/config/http.html
因此,如果没有任何额外的防火墙等,不良客户端可能只是使用各种协议测试开放端口,这些协议可能是也可能不是HTTP
,因此会导致带有不同签名的错误消息。如果没有很好的理由,就不需要让 AJP 全局可用,尤其是在线程启动器使用的代理设置的情况下。
<Connector address="localhost" port="port"
protocol="org.apache.coyote.ajp.AjpNioProtocol"
connectionTimeout="20000"
acceptorThreadCount="2"
maxThreads="1600"
redirectPort="8443" />
【讨论】:
以上是关于收到带有签名的 Ajp 无效消息的主要内容,如果未能解决你的问题,请参考以下文章
GoogleSignatureVerifier 签名无效消息(google play services 9.0.0)