apache - mod_rewrite + mod_proxy trabalhando em temporariedade, não trabalhando em produção (opção [P] ignorada)

2

Eu configurei um redirecionamento no meu host virtual Apache que atende vários subdomínios - chame-os de a.example.com e b.example.com - para que um aplicativo Ruby on Rails seja usado.

No meu arquivo de configuração virtualhost, tenho esta regra:

rewriteEngine on
rewriteRule proxy/(.+)$ http://news.example.com/$1 [P]

A ideia é que eu posso fazer http://a.example.com/proxy/news/a e obter o conteúdo de http://news.example.com/news/a , mas dentro do mesmo subdomínio, então ajax não acha que minhas solicitações de ajax são de domínio cruzado - mais informações sobre essa questão SO .

O problema é que, embora funcione bem no meu ambiente de teste, ele não está em produção!

Ambos os servidores são Ubuntu server 10.04. O Apache veio dos repositórios padrão do Ubuntu, usando apt-get install .

Eu fiz um diff de todo o / etc / apache2 / dir e a única diferença é o nome do servidor.

Se eu mudar a última opção para [L], eu recebo um redirecionamento, então isso me faz pensar que o mod_rewrite está funcionando. Apenas não fala com o mod_proxy.

Ao olhar para os logs ( /var/log/apache2 e o log rails), parece que a regra de reescrita na produção está simplesmente sendo ignorada - os logs são exatamente os mesmos como se não estivessem lá.

Como posso depurar isso? Posso forçar o Apache a me fornecer mais informações sobre por que essa regra específica não é aplicada quando eu acesso o /proxy ?

    
por egarcia 28.02.2012 / 14:45

1 resposta

2

Depois de navegar no RewriteLog como sugerido por larsks, percebemos que o Apache estava de fato fazendo os redirecionamentos - o problema estava em outro lugar.

Na verdade, foi o módulo que usamos para lidar com o ruby - Phusion Passenger .

Tivemos um desses "OMG o servidor está em baixo!" momentos e tentamos configurar a variável PassengerHighPerformance para ativada.

Infelizmente, essa configuração basicamente significa "ignorar mod_rewrite":)

Agora nós ajustamos um pouco - está em todos os locais, exceto quando eles começam por /proxy :

PassengerHighPerformance On
...
<location /proxy>
  PassengerHighPerformance Off
</location>

Depois que adicionamos essa opção de configuração ao nosso arquivo de configuração virtualhost, as coisas começaram a funcionar novamente

Se você vir aqui pelo google e achar isso útil, faça o favor de rever o comentário de Larsks sobre o OP. Seu comentário foi o que nos colocou no caminho certo.

    
por 29.02.2012 / 14:35