Ich möchte über den Apache-Webserver über Konnektoren auf Tomcat zugreifen. Ich habe mich an die Dokumentation gehalten: http://tomcat.apache.org/connectors-doc/generic_howto/quick.html Ich habe sie nur ein wenig geändert, um sie an die auf meinem Debian- (Squeeze) -System verwendete Verzeichnisstruktur anzupassen.
Also habe ich /etc/apache2/httpd.conf Folgendes hinzugefügt:
# 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
Ich habe das Laden des Moduls auskommentiert, da dies bereits geschieht, nachdem ich mod_jk über das Paketsystem (libapache2-mod-jk) installiert habe.
Meine Arbeiter.Eigenschaften sehen so aus:
# 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 wird direkt aus dem Archiv von Apache installiert, da es sich nicht um ein Paket in Squeeze handelt. Tomcat 7 läuft und ist über seinen eigenen Port erreichbar (8180, um nicht mit Tomcat6 aus dem Paketsystem zu kollidieren). Soweit ich weiß , sollte ich jetzt die Tomcat-Site mit http: // host / tomcat7 / sehen . Aber ich bekomme stattdessen eine 404. Was ist falsch?
Nachdem quanta angedeutet hatte, die Protokollstufe auf Debug zu setzen (danke), tat ich das und fand die folgende Fehlermeldung in mod_jk.log: 'jk_map_to_storage :: mod_jk.c (3585): fehlende uri map für 176.9.9.55:/tomcat7 / '. Ich habe danach gegoogelt und http://old.nabble.com/mod_jk%2C-missing-uri-map-td23984359.html gefunden
Daher wurden die in httpd.conf festgelegten Optionen in VirtualHosts nicht verwendet. Ich habe meinem VirtualHost 'JkMountCopy On' hinzugefügt - und zuerst einen Tomcat 404 (anstelle des httpd 404) erhalten. Problem hier, dass er versucht, auf genau den gleichen gemounteten URI zuzugreifen, also in meinem Fall / tomcat7. Ich habe stattdessen den Namen der Webanwendung als Mount verwendet und alles ist in Ordnung für mich.
quelle
JkLogLevel
aufdebug
und reload / Neustart Apache? Versuchen Sie Folgendes :http://host/tomcat7/xx
. Veröffentlichen Sie den gesamten Inhalt vonserver.xml
.Ich hatte das gleiche Problem. Die Lösung ist auf Veränderung
JkMount /tomcat7* worker1
zuJkMount /your-servlet-app* worker1
. Sie können so viele haben,JkMount
wie Sie möchten.Nach dem Hinzufügen
JkMount /manager* worker1
können Sie beispielsweise darauf zugreifenhttp://host/manager/html
Ich habe dieses Problem herausgefunden, nachdem ich sowohl AJP als auch http ausprobiert habe. Ich hatte das folgende Zugriffsprotokoll in meinem
/var/log/tomcat7/localhost_access_log.txt
Die ersten beiden Protokollzeilen wurden generiert, während ich AJP verwende. Die letzten drei wurden generiert, während ich http verwende, um direkt auf Tomcat zuzugreifen. Apache übergibt also die gesamte URL an Tomcat, anstatt das Präfix jkmount zu entfernen.
quelle
Verwenden Sie stattdessen mod_proxy_ajp oder mod_proxy_http, wenn Sie können: http://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html http://httpd.apache.org/docs/2.2/mod/mod_proxy_http.html
quelle