收到带签名的Ajp无效邮件

时间:2012-08-06 21:24:32

标签: apache2 tomcat7 mod-proxy proxypass

我正在使用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
    
  • server.xml中

    <Connector port="port" 
               protocol="org.apache.coyote.ajp.AjpNioProtocol" 
               connectionTimeout="20000" 
               acceptorThreadCount="2" 
               maxThreads="1600" 
               redirectPort="8443" />
    

5 个答案:

答案 0 :(得分:28)

对我来说,问题很简单。我正在发送HTTP请求,但连接器配置了AJP协议。 server.xml中的我的连接器配置如下:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

但是当我改变它时:

<Connector port="8009" protocol="HTTP/1.1" redirectPort="8443"/>

错误消失了。

希望这可以帮助有这个错误的人。

答案 1 :(得分:9)

当两端的缓冲区大小不同时,也可能发生这种情况:日志提及无效的AJP消息,浏览器收到400错误代码。

我已在Apache2配置中修复了AJP connectorpacketSizeProxyIOBufferSize的情况。

在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

答案 2 :(得分:2)

发现其中一个内部进程正在调用该端口并发送导致“Invalid message ..”错误的http请求。所以我最终为这些内部进程添加了一个额外的http连接器

答案 3 :(得分:0)

我今天收到了类似的消息:

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提醒可能会对最终到此的其他人有所帮助。

答案 4 :(得分:0)

  

没有请求发送到Web或tomcat服务器,它仍然引发该错误。 tomcat和apache中的访问日志显示没有请求进入。什么原因导致无效消息错误?

给其他人一些提示,因为我偶然在一个配置中忘记了它:Connector中提到的server.xml正在全局监听,因为仅指定了port,而没有任何address。默认情况下,后者被定义为全局监听:

  

默认情况下,此端口将用于与服务器关联的所有IP地址。

https://tomcat.apache.org/tomcat-7.0-doc/config/http.html

因此,在没有任何其他防火墙的情况下,坏客户端可能只是在使用各种协议来测试开放端口,而这些协议可能是HTTP,也可能不是<Connector address="localhost" port="port" protocol="org.apache.coyote.ajp.AjpNioProtocol" connectionTimeout="20000" acceptorThreadCount="2" maxThreads="1600" redirectPort="8443" /> ,因此会导致错误消息具有不同的签名。没有很好的理由,就不需要使AJP全局可用,尤其是在像线程启动器那样使用代理设置的情况下。

Activity