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.xml
and httpd.conf
, ou talvez me indicar alguns recursos mais detalhados?
Responder1
Você não deve precisar fazer nenhuma alteração, exceto server.xml
para 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.conf
e, 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/app2
eu 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 BalancerMember
e 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.).
- Certifique-se de que o httpd-devel esteja instalado
- Descompacte o JDK real em algum caminho, como /usr/local/jdk1.6.0_18/
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.