apache2 mod_proxy em conjunto com mod_rewrite não funciona como esperado

1

Estou tentando usar o mod_rewrite em conjunto com o mod_proxy para entregar o conteúdo de um servidor da Web interno diferente ( link ) por meio de um (falso ) subdiretório "foo" ( link ).

Usando o mod_proxy com a diretiva ProxyPass, eu já era capaz de fazer isso com essa configuração em /etc/apache2/mods-enabled/proxy.conf

ProxyPass /foo http://webserver.internal.com/foo
ProxyPassReverse /foo http://webserver.internal.com/foo

Agora, tenho o requisito adicional para impor a regravação de todas as solicitações para recursos dinâmicos do link para https: // example.com, que novamente funciona de maneira autônoma também, mas não junto com as regras ProxyPass mencionadas acima. Parece que a configuração do proxy sempre tem precedência sobre as regras de reescrita.

Até onde minha pesquisa me mostrou utilizando mod_proxy dentro de minhas regras de reescrita, deve ser tão fácil quanto adicionar

RewriteCond% {REQUEST_URI} ^ / foo  RewriteRule ^ / foo (. *) link $ 1 [P]

para minhas regras de reescrita e o URI reescrito será passado automaticamente pelo mod_proxy. Eu liguei RewriteLog com um LogLevel de 9, mas não consigo ver a correspondência de ^ / foo e a execução da seguinte Proxy-RewriteRule posteriormente. Não há nada como proxy de ir adiante, ou qualquer menção de proxy, nem mesmo uma entrada de erro dentro do RewriteLog.

Eu tenho os seguintes módulos proxy ativados em minha configuração do apache2

proxy 
proxy_connect 
proxy_http

Eu tentei testar meu RewriteCondition com outro exemplo - dessa vez correspondendo ^ / foo e redirecionando para www.google.com

RewriteCond %{REQUEST_URI} ^/foo
RewriteRule ^(.*)$ http://www.google.com/ [R=302,L]

que está funcionando como esperado, com os seguintes resultados no RewriteLog:

RewriteCond: input = '/ foo' pattern = '^ / foo' = > coincide  reescreva 'foo' - > ' link '  forçando explicitamente o redirecionamento com o link  escapando do link para redirecionar  redirecionar para o link [REDIRECT / 302]

A seguir, a configuração de reescrita que estou usando em uma seção de diretório do meu vhost.

    <Directory /my/app/webroot >
            RewriteEngine On
            RewriteBase /

            #redirect all http requests to https - WORKING
            # incoming request was forwarded as http from ELB
            RewriteCond %{HTTP:X-Forwarded-Proto} =http
            # avoid https rewriting for static files like images, javascripts, files and templates
            # for folders /img, /js, /css, /files and /templates under webroot
            RewriteCond %{REQUEST_URI} !^/(img|js|css|files|templates)
            RewriteRule (.*) https:// example.com%{REQUEST_URI}  [R=301,L]

            # requests to /foo *should* be handled by mod_proxy - NOT WORKING
            RewriteCond %{REQUEST_URI} ^/foo
            RewriteRule ^/foo(.*) http://webserver.internal.com/foo$1 [P]

            #pretty URLS for web-application - WORKING
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
    </Directory>

A máquina em questão é uma instalação básica do servidor Debian, com apache2 e php e está hospedada na nuvem amazon por trás de um Elastic Load Balancer.

Se você ler até aqui - antes de mais nada - obrigado pela paciência!

Seria ótimo se alguém pudesse ajudar a resolver esse problema. Talvez seja apenas um pouco acho que eu supervisionei.

Muito obrigado antecipadamente!

    
por chris_W 31.01.2011 / 17:21

1 resposta

1

Errado:

RewriteRule ^/foo(.*) http://webserver.internal.com/foo$1 [P]

corretamente:

RewriteRule ^foo(.*)$ http://webserver.internal.com/foo$1 [P,L]

Será um problema, escreva para o e-mail.

    
por 31.01.2011 / 17:46