我正在使用 Tomcat 7.0.29 和 Apache 2.2.22 modproxy。将 Ajp 配置为 httpd.conf 中的协议和 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" />
对我来说,问题很简单。我正在发送 HTTP 请求,但连接器配置了 AJP 协议。我在 server.xml
中的连接器配置如下:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
但是当我把它改成这个时:
<Connector port="8009" protocol="HTTP/1.1" redirectPort="8443"/>
错误消失了。
希望这将帮助某人解决此错误。
当两端的缓冲区大小不同时,也可能发生这种情况:日志提到无效的 AJP 消息,浏览器收到400
错误代码。
我已经修复了 AJP 连接器上的packetSize
和 Apache2 配置中的ProxyIOBufferSize
的情况。
在《雄猫server.xml
》中:
<Connector protocol="AJP/1.3" port="8009"
connectionTimeout="20000"
packetSize="65536"
proxyName="yourproxy.domain.ltd" proxyPort="80"
/>
在 Apache2 mod_proxy_ajp配置中,添加语句ProxyIOBufferSize 65536
。
发现其中一个内部进程正在调用该端口并发送 http 请求,导致"无效消息.."错误。所以我最终为这些内部进程添加了一个额外的 http 连接器
我今天收到了类似的消息:
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提醒会对最终来到这里的其他人有所帮助。
没有发送到 Web 或 tomcat 服务器的请求,它仍然会引发该错误。tomcat 和 apache 中的访问日志显示没有请求进入。是什么导致了无效消息错误?
只是给其他人的一些提示,因为我不小心在我的一个配置中忘记了相同的内容: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" />