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

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

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

No Apache, cada aplicativo Rails terá uma 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 possui uma URL como esta: ourserver.ourcompany.com/app1, ourserver.ourcompany.com/app2, etc.

O servidor já está instalado e funcionando com o Tomcat 6 rodando na porta 80 e servindo vários aplicativos Java. Quero adicionar o Apache e reconfigurar. Estou familiarizado com como configurar um único servidor Apache para hospedar aplicativos RoR usando Passenger. Só não sei como fazer o Apache e o Tomcat trabalharem juntos assim.

Encontrei vários recursos e discussões pesquisando no Google (por exemplo,Este), mas eles tendem a ser um pouco incompletos e incompletos ou não parecem corresponder ao que estou tentando fazer. Aquele ao qual vinculei parece ser para se você deseja enviar todas as solicitações ao Tomcat, não apenas algumas, e fazer com que o Apache cuide de outras.

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

Responder1

Você não deve precisar fazer nenhuma alteração, exceto server.xmlpara colocar o Tomcat de volta nas portas padrão para que o Apache possa lidar com a porta 80. A maior parte do trabalho será feita através dos arquivos de configuração do Apache. Normalmente, deixo-os fora httpd.confe, em vez disso, coloco-os em trechos de configuração menores no <ServerRoot>/conf.d/subdiretório.

Dado o seu exemplo de ourserver.ourcompany.com/app1& ourserver.ourcompany.com/app2eu assumiria uma configuração algo como o 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 atrás, talvez você queira configurar o mod_balancer e mover o ajp://paramod_balancer BalancerMembere substitua pela balancer://URL que se refere à configuração do balanceador.

Responder2

Pessoalmente, não gosto de mod_proxy_ajp; 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 o mod_jk de 5 maneiras para domingo para desempenho de seus aplicativos (threads, tempos limite, batidas, etc.).

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

    cd conectores tomcat-1.2.28-src/nativo

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

    fazer

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

Agora você precisa conectá-lo à configuração do Apache de maneira geral e, em seguida, a 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 trabalhador.properties básico, aqui estão os documentos:http://tomcat.apache.org/connectors-doc/reference/workers.htmlUm 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 girar aqui para ajustar o desempenho indefinidamente. Então, em cada host virtual você "monta" o(s) aplicativo(s) que deseja:

<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 se esqueça de um pouco de segurança e negue todo o acesso à sua pasta WEB-INF - a maioria dos webapps tem seu DSN de banco de dados com a senha web.xml quando implantados como uma bola de guerra.

informação relacionada