Como posso fazer com que os conectores AJP Tomcat funcionem?

8

Eu quero acessar o Tomcat por meio do servidor da web Apache usando conectores. Fiquei fiel à documentação: link Eu apenas modifiquei um pouco para combinar com a estrutura de diretórios usada no sistema Debian (Squeeze).

Então, adicionei o seguinte ao /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

Eu comentei o carregamento do módulo, porque isso já acontece, depois que eu instalei o mod_jk através do sistema de pacotes (libapache2-mod-jk).

Meus workers.properties são assim:

# 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

O Tomcat 7 é instalado diretamente do arquivo do Apache, porque não é um pacote no Squeeze. O Tomcat 7 está em execução e acessível sob sua própria porta (8180, para não colidir com tomcat6 do sistema de pacotes). Tanto quanto eu entendo, eu deveria ver agora o site tomcat com link . Mas eu recebo um 404 em vez disso. O que está errado?

Após o quanta sugerido para definir o nível de log para debug (obrigado) eu fiz isso e encontrei a seguinte mensagem de erro em mod_jk.log: 'jk_map_to_storage :: mod_jk.c (3585): falta de uri map para 176.9.9.55 : / tomcat7 / '. Eu pesquisei por isso e encontrei o link

Portanto, as opções definidas no httpd.conf não foram usadas no VirtualHosts. Eu adicionei 'JkMountCopy On' ao meu VirtualHost - e obtive primeiro um Tomcat 404 (em vez do httpd 404). Problema aqui, que ele tenta acessar exatamente o mesmo URI montado, então no meu caso / tomcat7. Eu usei o nome do webapp como mount e está tudo bem para mim.

    
por Mnementh 08.09.2011 / 23:51

3 respostas

4

Certifique-se de que:

  1. você digita uma barra link / , não link .
  2. você tem um conector AJP 1.3, ouça na porta 8009 em server.xml :

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

Se ainda assim não funcionar, sugiro que você ative a depuração e dê uma olhada em mod_jk.log .

EDITAR:

Se você usa:

JkMount  /tomcat7/* worker1

e acesso via link , tenho certeza que você receberá o erro Apache 404.

Você pode especificar JkMount em uma seção do Host virtual que deseja:

<VirtualHost *:80>
    ServerName  xx
    ServerAdmin xx

    JkMount /tomcat7 worker1
    JkMount /tomcat7/* worker1
</VirtualHost>
    
por 09.09.2011 / 06:26
1

Eu tive o mesmo problema. A solução é alterar JkMount /tomcat7* worker1 para JkMount /your-servlet-app* worker1 . Você pode ter quantos JkMount desejar.

Por exemplo, depois de adicionar JkMount /manager* worker1 , você poderá acessar http://host/manager/html

Eu descobri esse problema depois que tentei o AJP e o http. Eu tive o seguinte log de acesso no meu /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

As duas primeiras linhas log foram geradas enquanto eu uso o AJP. Os três últimos foram gerados enquanto eu uso o http para acessar diretamente o tomcat. Então, o apache está passando a URL inteira para o tomcat, em vez de remover o prefixo jkmount.

    
por 04.03.2016 / 06:54
0

Use mod_proxy_ajp ou mod_proxy_http se você puder: link link

    
por 14.09.2011 / 11:29