Come posso far funzionare i connettori Tomcat AJP?


9

Voglio accedere a Tomcat tramite il server web Apache utilizzando i connettori. Ho aderito alla documentazione: http://tomcat.apache.org/connectors-doc/generic_howto/quick.html L' ho modificato solo un po 'per abbinare la struttura di directory usata sul mio sistema Debian- (Squeeze).

Quindi ho aggiunto quanto segue a /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

Ho commentato il caricamento del modulo, perché ciò accade già, dopo aver installato mod_jk attraverso il pacchetto-sistema (libapache2-mod-jk).

I miei lavoratori.proprietà assomigliano a questo:

# 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 viene installato direttamente dall'archivio da Apache, perché non è un pacchetto in Squeeze. Tomcat 7 è in esecuzione e raggiungibile sotto la propria porta (8180, per non scontrarsi con tomcat6 dal sistema di pacchetti). Per quanto ho capito, dovrei vedere ora il sito tomcat con http: // host / tomcat7 / . Invece ottengo un 404. Che c'è?


Dopo aver suggerito di impostare il livello di log su debug (grazie), l'ho fatto e ho trovato il seguente messaggio di errore in mod_jk.log: 'jk_map_to_storage :: mod_jk.c (3585): manca la mappa uri per 176.9.9.55:/tomcat7 /'. Ho cercato su Google per questo e ho trovato http://old.nabble.com/mod_jk%2C-missing-uri-map-td23984359.html

Quindi le opzioni impostate in httpd.conf non sono state utilizzate in VirtualHosts. Ho aggiunto "JkMountCopy On" al mio VirtualHost e ho ottenuto prima un Tomcat 404 (anziché il httpd 404). Problema qui, che tenta di accedere esattamente allo stesso URI montato, quindi nel mio caso / tomcat7. Ho usato invece il nome della webapp come mount e tutto va bene per me.

Risposte:


4

Assicurati che:

  1. si digita una barra rovesciata http: // host / tomcat7 / , non http: // host / tomcat7 .
  2. hai un connettore AJP 1.3 in ascolto sulla porta 8009 in server.xml:

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

Se il problema persiste, ti suggerisco di attivare il debug e dare un'occhiata mod_jk.log.


MODIFICARE:

Se usi:

JkMount  /tomcat7/* worker1

e accedi tramite http: // host / tomcat7 , sono sicuro che otterrai l'errore Apache 404.

È possibile specificare JkMountin una sezione di host virtuale che si desidera:

<VirtualHost *:80>
    ServerName  xx
    ServerAdmin xx

    JkMount /tomcat7 worker1
    JkMount /tomcat7/* worker1
</VirtualHost>

Ho provato con e senza la barra e il server.xml contiene la riga menzionata. Mod_jk.log non contiene qualcosa di interessante, solo il messaggio, che mod_jk è stato inizializzato.
Mnementh,

1
Hai impostato JkLogLevela debuge ricarica / riavvio di Apache? Prova questo: http://host/tomcat7/xx. Pubblica l'intero contenuto di server.xml.
quanti,

Ah, grazie per il suggerimento con il livello di registro.
Mnementh,

Controlla la mia risposta sopra modificata.
quanti

1

Ho avuto lo stesso problema. La soluzione è cambiare JkMount /tomcat7* worker1in JkMount /your-servlet-app* worker1. Puoi averne quanti JkMountne vuoi.

Ad esempio, dopo aver aggiunto JkMount /manager* worker1, sarai in grado di accederehttp://host/manager/html

Ho capito questo problema dopo aver provato sia AJP che http. Ho avuto il seguente registro di accesso nel mio/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

Le prime due linee di registro sono state generate mentre utilizzo AJP. Gli ultimi tre sono stati generati mentre utilizzo http per accedere direttamente a Tomcat. Quindi apache sta trasmettendo l'intero URL a Tomcat, invece di rimuovere il prefisso jkmount.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.