Wie bringe ich die Tomcat AJP-Connectors zum Laufen?

9

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.

Mnementh
quelle

Antworten:

4

Stelle sicher das:

  1. Sie geben einen abschließenden Schrägstrich http: // host / tomcat7 / ein , nicht http: // host / tomcat7 .
  2. Sie haben einen AJP 1.3-Anschluss, der Port 8009 überwacht server.xml:

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

Wenn es immer noch nicht funktioniert, empfehle ich Ihnen, das Debugging zu aktivieren und einen Blick darauf zu werfen mod_jk.log.


BEARBEITEN:

Wenn du benutzt:

JkMount  /tomcat7/* worker1

und Zugriff über http: // host / tomcat7 , ich bin sicher, Sie werden den Apache 404-Fehler erhalten.

Sie können JkMountin einem Abschnitt für den virtuellen Host Folgendes angeben :

<VirtualHost *:80>
    ServerName  xx
    ServerAdmin xx

    JkMount /tomcat7 worker1
    JkMount /tomcat7/* worker1
</VirtualHost>
Quanten
quelle
Ich habe es mit und ohne Schrägstrich versucht und die server.xml enthält die erwähnte Zeile. Das mod_jk.log enthält nichts Interessantes, nur die Nachricht, dass mod_jk initialisiert wurde.
Mnementh
1
Haben Sie setzen JkLogLevelauf debugund reload / Neustart Apache? Versuchen Sie Folgendes : http://host/tomcat7/xx. Veröffentlichen Sie den gesamten Inhalt von server.xml.
Quanten
Ah, danke für den Hinweis mit der Log-Ebene.
Mnementh
Bitte überprüfen Sie meine oben bearbeitete Antwort.
Quanten
1

Ich hatte das gleiche Problem. Die Lösung ist auf Veränderung JkMount /tomcat7* worker1zu JkMount /your-servlet-app* worker1. Sie können so viele haben, JkMountwie Sie möchten.

Nach dem Hinzufügen JkMount /manager* worker1kö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

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

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.

Wu Yongzheng
quelle