【问题标题】:Ajp invalid message received with signature收到带有签名的 Ajp 无效消息
【发布时间】: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 -->
  • 你能提供你当前的配置来避免这种情况吗?要添加什么,要从哪个文件中删除什么

标签: apache2 tomcat7 mod-proxy proxypass


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    我已经修复了 Apache2 配置中 AJP connectorProxyIOBufferSize 上的 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" />
        

        【讨论】:

          猜你喜欢
          • 2018-08-08
          • 2015-12-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-02
          • 1970-01-01
          • 2016-09-16
          • 2020-06-28
          相关资源
          最近更新 更多