Conectando o tomcat6 ao apache2

4

Exclusão de responsabilidade: não é um administrador de servidor

Eu tenho coçado minha cabeça sobre isso por semanas agora (não mente de forma consistente você, pois isso seria enlouquecedor). Eu tenho tentado conectar meu servidor apache2 ao meu servidor tomcat até o ponto em que, se alguém encontrar * .jsp ou qualquer servelet ao navegar pelo meu diretório da web, ele será entregue ao tomcat.

Eu tenho tanto Apache2.0 (port 9099) e Tomcat6 (9089) rodando no Debian lenny na mesma caixa.

Atualmente, mod_jk está ativado com mod_jk.conf em $apacheHOME/mods-enabled/ com conteúdo:

    # Where to find workers.properties
JkWorkersFile /etc/apache2/workers.properties
    # Where to put jk shared memory
JkShmFile     /var/log/at_jk/mod_jk.shm
    # Where to put jk logs
JkLogFile     /var/log/at_jk/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 servlet for context /examples to worker named worker1
JkMount  /*/servlet/* worker1
    # Send JSPs  for context /examples to worker named worker1
JkMount  /*.jsp worker1

my workers.properties localizado em $apacheHOME/ com conteúdo:

workers.tomcat_home=/var/lib/tomcat6
workers.java_home=/usr/lib/jdk1.6.0_23/db/
worker.list=worker1
ps=/

worker.worker1.port=9081
worker.worker1.host=localhost
worker.worker1.type=ajp13

my web.xml in $tomcatHOME/conf tem os seguintes servlets ativados

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-cla$
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>


<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
</servlet-mapping>

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

server.xml:

                   - >               - >

<!-- Define an AJP 1.3 Connector on port 8009 -->

<Connector port="9081" protocol="AJP/1.3" redirectPort="9088" />

mod_jk.log:

[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] jk_open_socket::jk_connect.c (566): connect to 127.0.0.1:9081 failed (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] ajp_connect_to_endpoint::jk_ajp_common.c (869): Failed opening socket to (127.0.0.1:9081) (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [error] ajp_send_request::jk_ajp_common.c (1359): (worker1) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] ajp_service::jk_ajp_common.c (2194): (worker1) sending request to tomcat failed (recoverable), because of error during request sending (attempt=1)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] jk_open_socket::jk_connect.c (566): connect to 127.0.0.1:9081 failed (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] ajp_connect_to_endpoint::jk_ajp_common.c (869): Failed opening socket to (127.0.0.1:9081) (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [error] ajp_send_request::jk_ajp_common.c (1359): (worker1) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=111)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] ajp_service::jk_ajp_common.c (2194): (worker1) sending request to tomcat failed (recoverable), because of error during request sending (attempt=2)
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [error] ajp_service::jk_ajp_common.c (2212): (worker1) Connecting to tomcat failed. Tomcat is probably not started or is listening on the wrong port
[Mon Feb 21 13:49:35 2011] [2921:3075307264] [info] jk_handler::mod_jk.c (2364): Service error=-3 for worker=worker1

Parece haver um problema com a porta 9081, nenhum processo está usando, então eu suponho que ela esteja configurada incorretamente. Embora minha porta tomcat funcione bem.

 ickronia:/var/log/at_jk# telnet localhost 9081
 Trying ::1...
 Trying 127.0.0.1...
 telnet: Unable to connect to remote host: Connection refused
 ickronia:/var/log/at_jk#

Pelo que eu posso dizer, não há um negócio engraçado, pois os logs apache2, tomcat e mod_jk são verdes; No entanto, sempre que eu navego para um jsp, ele simplesmente exibe o javascript.

Não sei ao certo qual é o problema, mesmo despejando os logs e a documentação para ajuda. Eu sou um novato no mundo do servelet.

    
por StudentKen 14.02.2011 / 01:58

3 respostas

1

Responda a dois, pois muitas edições estão acontecendo. Esta é a minha configuração de trabalho: -

mod-jk.conf: -

JkWorkersFile /etc/libapache2-mod-jk/workers.properties
JkLogFile /var/log/apache2/mod_jk.log
JkLogLevel info
JkMount /portal worker1
JkMount /portal/* worker1

nos sites habilitados: -

<VirtualHost _default_:443>
    JkMountCopy On
    blah
    blah
</VirtualHost>

worker.properties (Normalmente, ele passa pelo loadbalancer, mas simplificado aqui): -

worker.list=worker1

worker.worker1.port=9009
worker.worker1.host=host_name
worker.worker1.type=ajp13

tomcat server.xml: -

 <?xml version='1.0' encoding='utf-8'?>
<Server port="9005" shutdown="SHUTDOWN">

  <!-- cut -->

  <Service name="Catalina">
    <Connector port="9080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="9443" />

    <Connector port="9443" protocol="HTTP/1.1" SSLEnabled="true"
               keystoreFile="<path_to_keystore>.ks"
               kestorePass="<password for keystore>"
               maxThreads="200" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />

    <Connector port="9009" protocol="AJP/1.3" redirectPort="9443" />

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">
      <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">    
      </Host>
    </Engine>
  </Service>
</Server>

Então Tomcat está escutando http em 9080, https em 9443 e ajp em 9009.

O Apache está escutando na porta https 443. Qualquer coisa enviada para o contexto / portal nesse servidor está sendo enviada para o mod_jk worker1, que está sendo encaminhado para o tomcat por meio do ajp.

Espero que isso ajude!

    
por 22.02.2011 / 08:09
1

Meu palpite é que o server.xml no tomcat não está usando o CoyoteConnector para a porta 9089, que é o que fala o protocolo ajp. Eu suspeito que você esteja falando sobre isso, e que se você clicar link , ele será carregado.

Você desejará que o workers.properties use a porta CoyoteConnector.

    
por 17.02.2011 / 01:39
1

Você não diz se já executou um JKMountCopy em um host virtual ou não.

Na minha caixa do Ubuntu em / etc / apache2 / sites-enabled / 000-default-ssl

<VitualHost _default_:443>
  JkMountCopy On

  blah 
  blah

</VirtualHost>

De link Se você encontrar a descrição da Diretiva do JkMount, verá que diretivas são não herdadas pelos VirtualHosts. Você precisa especificar novamente, ou se quiser incluir tudo o que precisa, use o JkMountCopy On.

Verifique também se a porta à qual você está se conectando possui um conector AJP configurado no server.xml. Porta de redirecionamento refere-se à porta ssl.

Do exemplo incluído no Tomcat ...

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    
por 15.02.2011 / 11:10