收到带有签名的 Ajp 无效邮件



我正在使用 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" />

最新更新