Sintaxe Apache2 RewriteRule para redirecionamento do ActiveSync no proxy reverso

2

Ok, acho que essa é uma tarefa bastante simples, mas estou tendo problemas para fazer um teste confiável e descobrir o que fiz de errado. Eu tentei seguir a documentação do mod_rewrite do Apache, mas não parece estar funcionando da maneira que eu esperava.

Eu tenho um servidor Apache em execução como um proxy reverso na frente de um CAS do Exchange para acesso público ao OWA, e queremos interceptar o tráfego do ActiveSync (correspondência de padrão simples) e redirecioná-lo para um URL do SEG (Secure Email Gateway). Todos os outros (por exemplo, o OWA do navegador da Web) devem ser enviados ao CAS como de costume.

Então, o que começamos é algo assim, e isso funciona perfeitamente para o acesso do OWA, mas não faz o redirecionamento do ActiveSync para o SEG:

<VirtualHost *:443>
  ServerName webmail.company.com:443
  RewriteEngine on
  RewriteRule ^/$ https://webmail.company.com/exchange [R,L]
  <Location />
    Order allow,deny
    Allow from all
    # This is the CAS's internal IP
    ProxyPass https://10.100.10.209/
    ProxyPassReverse https://10.100.10.209/
  </Location>
</VirtualHost>

Então, adicionei essa linha (a do meio) em uma tentativa de reescrever URLs que começam com "/ Microsoft-Server-Activesync / [whatever]" em " link ":

<VirtualHost *:443>
  ...
  RewriteEngine on
  RewriteRule ^/Microsoft-Server-Activesync?(.+)$ https://seg.company.com/Microsoft-Server-Activesync?$1 [R]
  RewriteRule ^/$ https://webmail.company.com/exchange [R,L]
  ...
</VirtualHost>

Quando fiz essa alteração (no teste, é claro), o tráfego que estou enviando para ele de um dispositivo móvel parece não estar sendo redirecionado. Em vez disso, o tráfego do ActiveSync simplesmente flui para o Exchange CAS como de costume, como se a regra não estivesse sendo acionada.

Então, duas perguntas:

  1. Estou fazendo algo óbvio errado com o RewriteRule que eu adicionei ?, e
  2. Como posso solucionar isso de maneira um pouco mais inteligente do que "acesse o URL do ActiveSync em um navegador, verifique os registros do servidor da web para descobrir onde ele foi"?

Obrigado antecipadamente!

Atenciosamente, Jon Heese

    
por Jon Heese 28.08.2013 / 20:12

1 resposta

2

Heh, essa configuração parecia familiar por um motivo. Ei Jon! Espero não ter deixado muitas bagunças para você limpar.

Eu acho que você está na maior parte do caminho. Um pequeno problema de sensibilidade de maiúsculas e minúsculas, os telefones devem enviar /Microsoft-Server-ActiveSync em vez de /Microsoft-Server-Activesync , de modo que perderia a correspondência. Além disso, não tenho certeza se as solicitações sempre terão algo seguindo esse caminho, então vamos querer que ainda funcione se a captura for apenas uma cadeia de comprimento zero (e se houver uma string de consulta, ela será executada - podemos completamente ignorá-lo e será preservado).

Algo parecido com isto:

RewriteRule ^/Microsoft-Server-ActiveSync(.*)$ https://seg.company.com/Microsoft-Server-ActiveSync$1 [R,L]

O L sinalizador não é realmente necessário com a configuração atual, mas geralmente é bom ter apenas para garantir que nenhuma nova regra na linha final acabe mexendo na meta de redirecionamento.

Tente trocar isso e, se não funcionar, uma boa maneira de aprofundar o que está acontecendo seria ativar um arquivo RewriteLog e exibir RewriteLogLevel 9 .

    
por 29.08.2013 / 08:23