Como posso definir o uso de mod_proxy_ajp com o Apache e o Tomcat?

4

Gostaria de executar o Apache e o Tomcat em um servidor RHEL 5 com o Apache gerenciando aplicativos Ruby on Rails (por meio do mod_rails / Passenger) e o Tomcat gerenciando aplicativos Java.

Sob o Apache, cada aplicativo Rails terá um URL e um vhost. As URLs já estão configuradas em nosso servidor DNS para apontar para a máquina.

No Tomcat, cada aplicativo Java tem um URL como este: ourserver.ourcompany.com/app1 , ourserver.ourcompany.com/app2 , etc.

O servidor já está em execução com o Tomcat 6 em execução na porta 80 e atendendo a vários aplicativos Java. Eu quero adicionar o Apache e reconfigurar. Estou familiarizado com a configuração de um único servidor Apache para hospedar aplicativos RoR usando o Passenger. Eu só não sei como fazer com que o Apache e o Tomcat trabalhem juntos assim.

Encontrei vários recursos e discussões por meio do Googling (por exemplo, este ), mas eles tendem a ser um pouco incompletos e incompletos ou não parecem realmente combinar com o que estou tentando fazer. O link para o qual eu me ligo parece ser se você quiser enviar todos os pedidos para o Tomcat, não apenas certos e fazer com que o Apache manipule outros.

Alguém poderia sugerir um exemplo de configuração para server.xml e httpd.conf , ou talvez me aponte para alguns recursos mais detalhados?

    
por Agvorth 25.01.2010 / 23:59

2 respostas

4

Você não precisa fazer alterações no server.xml , exceto colocar o Tomcat de volta nas portas padrão, para que o Apache possa manipular a porta 80. A maior parte do trabalho será feita através dos arquivos de configuração do Apache. Eu normalmente deixo esses fora do httpd.conf e, em vez disso, coloco-os em pequenos fragmentos de configuração sob o subdiretório <ServerRoot>/conf.d/ .

Dado o seu exemplo de ourserver.ourcompany.com/app1 & ourserver.ourcompany.com/app2 Gostaria de assumir uma configuração algo ao longo do seguinte:

<VirtualHost *:80>
    ServerName ourserver.ourcompany.com
    ErrorLog ...
    CustomLog ...

    [other VHost configurations]

    ProxyPass /app1 ajp://tomcat_hostname:8009/app1
    ProxyPassReverse /app1 ajp://tomcat_hostname:8009/app1

    ProxyPass /app2 ajp://tomcat_hostname:8009/app2
    ProxyPassReverse /app2 ajp://tomcat_hostname:8009/app2
</VirtualHost>

Se você tiver vários servidores Tomcat agrupados por trás, convém configurar o mod_balancer e mover o ajp:// para mod_balancer BalancerMember e substitua pela URL balancer:// que se refere à configuração do balanceador.

    
por 26.01.2010 / 04:24
3

Eu não gosto de mod_proxy_ajp pessoalmente; Ao executar o Tomcat no Apache, vou direto para a instalação do mod_jk (o módulo dos codificadores do Tomcat) para fornecer a conexão AJP. Você pode ajustar mod_jk 5 maneiras para o domingo para o desempenho de seus aplicativos (threads, tempos limite, bate, etc).

  1. Verifique se o httpd-devel está instalado
  2. Descompacte o JDK real em algum caminho, como /usr/local/jdk1.6.0_18 /
  3. pegue a fonte "tomcat-connectors" do tomcat.apache.org e compile-a

    cd tomcat-connectors-1.2.28-src / native

    ./ configure --with-apxs = /usr/sbin/apxs --with-java = /usr/local/jdk1.6.0_18 --enable-prefork

    faça

    cp apache-2.0 / mod_jk.so / usr / local / lib /

Agora você precisa conectá-lo à configuração do Apache em um sentido geral e, em seguida, em cada host virtual, conforme apropriado. Na configuração geral, você adiciona algo como:

LoadModule jk_module /usr/local/lib/mod_jk.so
JkWorkersFile  /usr/local/tomcat/conf/workers.properties
JkShmFile      /var/log/httpd/mod_jk.shm
JkLogFile      /var/log/httpd/mod_jk.log
JkLogLevel     error

Você precisará criar o arquivo básico worker.properties, veja os documentos: link Um muito básico pode ser assim:

workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/jdk1.6.0_18
ps=/
worker.list=ajp13
worker.maintain=60
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=ajp13

Isso usará a configuração padrão da porta 8009 do server.xml - há um milhão de botões que você pode mexer aqui para ajustar a música sem parar. Em seguida, em cada host virtual, você "monta" o (s) aplicativo (s) desejado (s):

<VirtualHost *:80>
 ServerName foo.bar.com
 ...other options ...

 JkMount /app1/* ajp13
 <Location "/app1/WEB-INF/">
    deny from all
 </Location>

 JkMount /app2/* ajp13
 <Location "/app2/WEB-INF/">
    deny from all
 </Location>

</VirtualHost>

Como você pode ver na parte inferior, não esqueça de um pouco de segurança e negue todo o acesso à sua pasta WEB-INF - a maioria dos webapps têm seu DSN de banco de dados com senha web.xml quando implantados como warball.

    
por 26.01.2010 / 04:32