Como faço para obter o Tomcat 5.5 para correr atrás apache 2 com o passar mod_rewrite através de pedidos para mod_jk e descascar contexto aplicativo?

StackOverflow https://stackoverflow.com/questions/208261

Pergunta

Ok, então eu quero começar um webapp em execução no tomcat (5.5) para correr atrás apache 2 (2.2.3 para ser preciso) servindo a partir da raiz do site (ou seja, sem o contexto), com conteúdo estático sendo servido via apache.

Portanto, se o aplicativo está sendo executado em "/myapp" na tomcat eu quero usar apache (mais mod_rewrite) para torná-lo comportar-se como se ele está sendo executado em "/" em vez.

Mod_jk está configurado e ok trabalhando. Eu posso acessar o aplicativo da "/myapp", mas eu não consigo obter a última operação bit. Abaixo está a configuração que eu tenho para mod_rewrite para tentar obter esse trabalho. Ele fica corretamente reescritas /static/ urls para obter apache para servi-los a partir do webapp descompactado e se eu permitir que a reescrita log vejo que ele tente passar por todas as outras solicitações para /myapp via mod_jk. No entanto, parece que mod_jk não está a processar a solicitação mais tarde.


JkMount /myapp/*      worker1

RewriteEngine On

# ensure static stuff gets served by apache
RewriteRule ^/static/(.*)$ /var/lib/tomcat5.5/webapps/myapp/static/$1 [L]
# everything else should go through tomcat
RewriteRule ^/(.*)$ /myapp/$1 [L,PT]

Quando eu fiz isso com apache 1 no passado eu tinha que ter certeza get mod_jk está carregado antes mod_rewrite, mas eu não consigo alcançar este sob o Apache 2. Quaisquer pensamentos? Como outras pessoas costumam fazer isso?

Foi útil?

Solução

Dirigido para começar este trabalho no final. Parece que eu preciso definir um JkOption a:


JkOptions     +ForwardURICompat

e olha então mod_jk na URL reescrito. Deve admitir não 100% de certeza bastante por que isso funciona, mas eu acredito que ele está revertendo para uma forma mais antiga de comportamento. Se alguém pode me dizer uma maneira melhor / mais correta de fazer isso, eu adoraria saber.

Outras dicas

Pode ser melhor usar o Apache para o proxy em vez de mod_jk. Algo parecido com isto:

ProxyPass / static / http: // localhost: 8080 / myapp / static /

Pode ser mais fácil ou mais transparente o que acontece se você usar Tomcat Hosts virtuais ou conectores diferentes para diferentes hosts e aplicativos de raiz apenas deploy (em "/") e configuração do Apache mod_jk de encaminhamento para as diferentes conectores ou hosts virtuais.

Nota: Quando eu precisava disso eu trabalhei com conectores diferentes para diferentes hospedeiros Tomcat ou Motores (não me lembro) e aplicações ROOT implantados. Eu nunca tentei hosts virtuais (nome baseado) em tomcat, única supondo que isso poderia funcionar.

Benefício:. Nenhuma tradução caminho, portanto, muito mais fácil de entender quando você tem que fazer alterações nos meses de instalação após a implantação inicial

confesso, ele se sente um pouco estranho, mas o benefício de leitura vale muito para mim.

Nós usamos a bandeira 'R' em vez de 'PT':

RewriteRule ^/(.*)$ /myapp/$1 [L,R]

Editar: Eu perdi o ponto para não alterar a URL que o usuário vê. Uma forma alternativa é fazer:

JkMount /* worker1
JkUnmount /static/* worker1

Em seguida, você não vai precisar do RewriteRule.

E de acordo com Apache Tomcat site as novas configurações padrão do mod_jk são incompatíveis com mod_rewrite e você deve usar +ForwardURICompatUnparsed.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top