J'utilise Tomcat 7.0.29 avec Apache 2.2.22 modproxy. Configuré Ajp en tant que protocole dans httpd.conf et AjpNioProtocol dans server.xml. Après le démarrage du serveur, les journaux sont remplis avec le message suivant:
Grave: message non valide reçu avec la signature 20599
com.Apache.coyote.ajp.AjpMessage processHeader
Aucune demande n'a été envoyée au Web ou au serveur Tomcat et cette erreur est toujours générée. Les journaux d’accès dans Tomcat et Apache indiquent qu’aucune demande n’arrive.… Quelle est la cause de l’erreur de message non valide?
Voici la configuration:
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" />
Pour moi, le problème était simple. J'envoyais des requêtes HTTP mais le connecteur était configuré avec le protocole AJP. Mon connecteur dans server.xml
a été configuré comme suit:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
Mais quand je l'ai changé en ceci:
<Connector port="8009" protocol="HTTP/1.1" redirectPort="8443"/>
L'erreur est partie.
Espérons que cela aidera quelqu'un avec cette erreur.
Cela peut également se produire lorsque la taille du tampon n'est pas identique aux deux extrémités: les journaux mentionnent un message AJP non valide et le navigateur reçoit le code d'erreur 400
.
J'ai corrigé la situation avec packetSize
sur connecteur AJP et ProxyIOBufferSize
dans la configuration d'Apache2.
Dans Tomcat server.xml
:
<Connector protocol="AJP/1.3" port="8009"
connectionTimeout="20000"
packetSize="65536"
proxyName="yourproxy.domain.ltd" proxyPort="80"
/>
Dans Apache2 mod_proxy_ajp configuration , ajoutez l'instruction ProxyIOBufferSize 65536
.
Il a été constaté que l'un des processus internes appelait ce port et envoyait des requêtes http, provoquant l'erreur "Message non valide ..". J'ai donc fini par ajouter un connecteur http supplémentaire pour ces processus internes
Aucune demande n'a été envoyée au Web ou au serveur Tomcat et cette erreur est toujours générée. Les journaux d’accès dans Tomcat et Apache indiquent qu’aucune demande n’arrive. Quelle est la cause de l’erreur de message non valide?
Juste un indice pour d’autres personnes parce que j’ai oublié la même chose dans une de mes configurations par accident: La Connector
mentionnée dans server.xml
écoute globalement, car seule port
est spécifiée, sans address
. Ce dernier est défini pour écouter globalement par défaut:
Par défaut, ce port sera utilisé sur toutes les adresses IP associées au serveur.
https://Tomcat.Apache.org/Tomcat-7.0-doc/config/http.html
Donc, sans pare-feu supplémentaire ou similaire, il est possible que de mauvais clients testent simplement les ports ouverts en utilisant divers protocoles, qui peuvent ou non être HTTP
et entraînent par conséquent des messages d'erreur avec différentes signatures. Sans de très bonnes raisons, il ne devrait pas être nécessaire de rendre AJP disponible dans le monde entier, surtout dans le cas d'une configuration de proxy telle que celle utilisée par le démarreur de thread.
<Connector address="localhost" port="port"
protocol="org.Apache.coyote.ajp.AjpNioProtocol"
connectionTimeout="20000"
acceptorThreadCount="2"
maxThreads="1600"
redirectPort="8443" />
J'ai reçu un message similaire aujourd'hui:
Nov 18, 2016 4:25:00 PM org.Apache.coyote.ajp.AjpMessage processHeader
SEVERE: Invalid message received with signature 65524
La cause principale de mon problème était que selinux ne laissait pas Apache se connecter à Tomcat. Je suis un peu confus quant au résultat de cette erreur - je m'attendrais à ce qu'il n'y ait aucun lien, point final. Je suppose que j’ai probablement tenté de me connecter manuellement à ce port avec telnet. Faire cela donne certainement un message similaire.
Quoi qu'il en soit, ce rappel selinux sera utile à quelqu'un d'autre qui finira ici.