web-dev-qa-db-fra.com

Comment obtenez-moi les connecteurs AJP Tomcat?

Je veux accéder à Tomcat via le serveur Web Apache à l'aide de connecteurs. J'ai collé à la documentation: http://tomcat.apache.org/connectors-doc/generic_howto/Quick.html I Je n'ai qu'un peu pour correspondre à la structure de répertoire utilisée sur mon debian presser )-Système.

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 d'emballage (Libapache2-Mod-JK).

Mes ouvriers.Properties 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 d'archive d'Apache, car il ne s'agit pas d'un package de presser. Tomcat 7 est en cours d'exécution et accessible sous son propre port (8180, pour ne pas entrer en collision avec Tomcat6 du système d'emballage). Pour autant que je sache, je devrais voir maintenant le site Tomcat avec --- (http: // hôte/tomcat7 / . Mais je reçois un 404 à la place. Qu'est-ce qui ne va pas?


Après que Quanta a indiqué pour définir le niveau de journal à déboguer (merci), j'ai fait cela et j'ai trouvé le message d'erreur suivant dans mod_jk.log: 'jk_map_to_storage :: mod_jk.c (3585): carte URI manquante pour 176.9.9.55:/TOMCAT7/'. J'ai googlé pour ça et trouvé http://old.nnlambabil.com/mod_jk%2c-missing-uri-map-td23984359.html

Les options définies dans httpd.conf n'étaient donc utilisées pas dans VirtualHosts. J'ai ajouté 'jkmountcopy sur' à mon virtualhost - et j'ai eu d'abord 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 sous forme de montage et tout va bien pour moi.

9
Mnementh

Sois sûr que:

  1. vous tapez une barre oblique de fin http: // hôte/tomcat7/, pas http: // hôte // 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'allumer le débogage et de regarder mod_jk.log.


Edit:

Si tu utilises:

JkMount  /Tomcat7/* worker1

et accès via http: // hôte/tomcat7 , je suis sûr que vous obtiendrez l'erreur Apache 404.

Vous pouvez spécifier JkMount dans une section hôte virtuelle que vous souhaitez:

<VirtualHost *:80>
    ServerName  xx
    ServerAdmin xx

    JkMount /Tomcat7 worker1
    JkMount /Tomcat7/* worker1
</VirtualHost>
4
quanta

J'ai eu le même problème. La solution consiste à changer JkMount /Tomcat7* worker1 à JkMount /your-servlet-app* worker1. Vous pouvez avoir autant de JkMount comme vous le souhaitez.

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

J'ai compris 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 journalisation ont été générées pendant que j'utilise AJP. Les trois derniers ont été générés pendant que j'utilise HTTP pour accéder directement à Tomcat. Donc, Apache passe toute l'URL à Tomcat, au lieu de supprimer le préfixe Jkmount.

1
Wu Yongzheng

Utilisez plutôt mod_proxy_ajp ou mod_proxy_http à la place si vous pouvez: http://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.htmlhttp://httpd.apache.org/docs /2.2/mod/mod_proxy_http.html

0
muffl0n