Apache 500 ao fazer proxy de URLs com% 20 via mod_proxy

3

Estamos recebendo um 500 fora do Apache ao fazer proxy de chamadas para o tomcat quando há um espaço codificado na URL.

Estamos migrando um aplicativo que funcionava bem em um contêiner J2EE que tinha uma versão antiga e integrada do Apache (1.x), mas assim que movemos o aplicativo para o Tomcat + Apache 2 + mod_proxy, começamos a ver o erro.

Por exemplo:

http://foo.org/app/rest/no_spaces/  works fine
http://foo.org/app/rest/no%20spaces fails with a 500

O pedido funciona bem se acertarmos o tomcat diretamente e sabemos que ele não está atingindo o servlet ao passar pelo Apache.

A configuração do proxy é a seguinte para o servidor que vive no foo.org:

ProxyPass /app ajp://127.0.0.1:8080/app
ProxyPassReverse /app ajp://127.0.0.1:8080/app

Tentamos mudar para HTTP em vez de AJP sem alterar o erro.

A principal teoria é que o mod_proxy está decodificando o% 20 e, em seguida, esperando ver outras informações do cabeçalho HTTP em vez da substring de URL restante e está resultando em um 500. Se esse for o caso, alguém tem uma solução alternativa que não envolvem reescrever o aplicativo. Se esta não é a causa, alguém tem uma sugestão sobre o que poderia ser?

Não vi nenhuma documentação ou relatórios de bugs desse sintoma exato nas minhas pesquisas.

Obrigado antecipadamente.

    
por Matt Franklin 08.06.2011 / 17:16

1 resposta

1

A adição de 'nocanon' à sua regra ProxyPass funciona?

i.e. ProxyPass / app ajp: //127.0.0.1: 8080 / app nocanon

Nos documentos:

Normally, mod_proxy will canonicalise ProxyPassed URLs. But this may be incompatible with some backends, particularly those that make use of PATH_INFO. The optional nocanon keyword suppresses this, and passes the URL path "raw" to the backend. Note that may affect the security of your backend, as it removes the normal limited protection against URL-based attacks provided by the proxy.

    
por 24.06.2011 / 05:29