Apache 2.2.22 modproxyを前面に並べたTomcat 7.0.29を使用しています。 httpd.confのプロトコルとしてAjpを、server.xmlのAjpNioProtocolとしてAjpを構成しました。サーバーの起動後、ログには次のメッセージが書き込まれます。
重大:署名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" />
私にとって、問題は簡単でした。 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
の両方の状況を修正しました。
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
。
内部プロセスの1つがそのポートを呼び出し、httpリクエストを送信して「Invalid message ..」エラーを引き起こしていることがわかりました。そのため、これらの内部プロセス用に追加のhttpコネクタを追加することになりました
WebサーバーまたはTomcatサーバーに送信されるリクエストはなく、それでもそのエラーがスローされます。 TomcatおよびApacheのアクセスログに、リクエストが着信していないことが示されています。無効なメッセージエラーの原因は何ですか?
偶然に私の設定の1つで同じことを忘れたので、他の人々のためのちょっとしたヒント:言及されたConnector
in server.xml
は、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" />
今日、私は同様のメッセージを受け取りました:
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のリマインダーは、ここにたどり着く他の誰かに役立つでしょう。