Comment faire fonctionner les connecteurs Tomcat AJP?

9

Je souhaite accéder à Tomcat via le serveur Web Apache à l'aide de connecteurs. Je m'en suis tenu à la documentation: http://tomcat.apache.org/connectors-doc/generic_howto/quick.html Je ne l'ai que légèrement modifiée pour correspondre à la structure de répertoires utilisée sur mon système Debian- (Squeeze) -System.

J'ai donc ajouté ce qui suit à /etc/apache2/httpd.conf:

# Load mod_jk module
# Update this path to match your modules location
#LoadModule    jk_module  libexec/mod_jk.so
# Declare the module for <IfModule directive> (remove this line on Apache 2.x)
#AddModule     mod_jk.c
# Where to find workers.properties
# Update this path to match your conf directory location (put workers.properties next to httpd.conf)
JkWorkersFile /etc/apache2/workers.properties
# Where to put jk shared memory
# Update this path to match your local state directory or logs directory
JkShmFile     /var/log/apache2/mod_jk.shm
# Where to put jk logs
# Update this path to match your logs directory location (put mod_jk.log next to access_log)
JkLogFile     /var/log/apache2/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel    info
# Select the timestamp log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# Send everything for context /examples to worker named worker1 (ajp13)
JkMount  /tomcat7/* worker1

J'ai commenté le chargement du module, car cela se produit déjà, après avoir installé mod_jk via le système de package (libapache2-mod-jk).

Mes travailleurs.propriétés ressemblent à ceci:

# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009

Tomcat 7 est installé directement à partir des archives d'Apache, car il ne s'agit pas d'un package dans Squeeze. Tomcat 7 est en cours d'exécution et accessible sous son propre port (8180, pour ne pas entrer en collision avec tomcat6 à partir du système de package). Pour autant que je comprends, je devrais voir maintenant le site tomcat avec http: // host / tomcat7 / . Mais je reçois un 404 à la place. Qu'est-ce qui ne va pas?


Après que quanta ait suggéré de définir le niveau de journalisation sur le débogage (merci), je l'ai fait et j'ai trouvé le message d'erreur suivant dans mod_jk.log: 'jk_map_to_storage :: mod_jk.c (3585): carte d'URI manquante pour 176.9.9.55:/tomcat7 / '. J'ai googlé pour cela et trouvé http://old.nabble.com/mod_jk%2C-missing-uri-map-td23984359.html

Les options définies dans httpd.conf n'étaient donc pas utilisées dans VirtualHosts. J'ai ajouté «JkMountCopy On» à mon VirtualHost - et j'ai d'abord obtenu un Tomcat 404 (au lieu du httpd 404). Problème ici, qu'il essaie d'accéder exactement au même URI monté, donc dans mon cas / tomcat7. J'ai utilisé à la place le nom de la webapp comme monture et tout va bien pour moi.

Mnementh
la source

Réponses:

4

Sois sûr que:

  1. vous tapez une barre oblique de fin http: // host / tomcat7 / , pas http: // host / tomcat7 .
  2. vous avez un connecteur AJP 1.3 écouter sur le port 8009 dans server.xml:

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

Si cela ne fonctionne toujours pas, je vous suggère d'activer le débogage et d'y jeter un œil mod_jk.log.


ÉDITER:

Si tu utilises:

JkMount  /tomcat7/* worker1

et accédez via http: // host / tomcat7 , je suis sûr que vous obtiendrez l'erreur Apache 404.

Vous pouvez spécifier JkMountdans une section Virtual Host que vous souhaitez:

<VirtualHost *:80>
    ServerName  xx
    ServerAdmin xx

    JkMount /tomcat7 worker1
    JkMount /tomcat7/* worker1
</VirtualHost>
quanta
la source
J'ai essayé avec et sans la barre oblique et le server.xml contient la ligne mentionnée. Le mod_jk.log ne contient pas quelque chose d'intéressant, seulement le message, que mod_jk a été initialisé.
Mnementh
1
Avez - vous mis JkLogLevelà debuget reload / redémarrer Apache? Essayez ceci: http://host/tomcat7/xx. Postez l'intégralité du contenu de server.xml.
quanta
Ah, merci pour l'indice avec le niveau de journal.
Mnementh
Veuillez consulter ma réponse modifiée ci-dessus.
quanta
1

J'ai eu le même problème. La solution est de passer JkMount /tomcat7* worker1à JkMount /your-servlet-app* worker1. Vous pouvez en avoir autant JkMountque vous le souhaitez.

Par exemple, après l'ajout JkMount /manager* worker1, vous pourrez accéder àhttp://host/manager/html

J'ai découvert ce problème après avoir essayé AJP et http. J'ai eu le journal d'accès suivant dans mon/var/log/tomcat7/localhost_access_log.txt

10.215.22.132 - - [04/Mar/2016:13:14:39 +0800] "GET /tomcat-demo/manager/ HTTP/1.1" 404 1009
10.215.22.132 - - [04/Mar/2016:13:26:05 +0800] "GET /tomcat-demo/manager/http/ HTTP/1.1" 404 1019
10.215.22.132 - - [04/Mar/2016:13:40:33 +0800] "GET /manager/ HTTP/1.1" 302 -
10.215.22.132 - - [04/Mar/2016:13:40:33 +0800] "GET /manager/html?org.apache.catalina.filters.CSRF_NONCE=E68B5F7E6E96D09C75A8D6854ECE9092 HTTP/1.1" 401 2474
10.215.22.132 - yz [04/Mar/2016:13:40:35 +0800] "GET /manager/html?org.apache.catalina.filters.CSRF_NONCE=E68B5F7E6E96D09C75A8D6854ECE9092 HTTP/1.1" 200 12405

Les deux premières lignes de journal ont été générées lorsque j'utilise AJP. Les trois derniers ont été générés lorsque j'utilise http pour accéder directement à Tomcat. Apache transmet donc l'URL entière à tomcat, au lieu de supprimer le préfixe jkmount.

Wu Yongzheng
la source