Por que algumas regras de reescrita falham enquanto a AJP está atendendo todas as minhas solicitações ao Tomcat?

1

Eu tenho um servidor Apache usando o mod_proxy_ajp para que o Jboss / Tomcat5.5 manipule todas as solicitações. Aqui está como eu configurei o Apache 2.2.17 e, na maioria das vezes, ele funciona:

# Proxy pass all work to Tomcat, mod_jk 1.2.31
<Location />
    # ProxyPass / http://localhost:8080/
    ProxyPass ajp://localhost:8009/
    ProxyPassReverse ajp://localhost:8009/
</Location>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
#  and , to handle the redirect of the root dir
Redirect permanent / https://%{HTTP_HOST}%/myapp

Infelizmente, enquanto o ProxyPass está ativado , não consigo fazer com que as regras do mod_rewrite funcionem, exceto as acima. Como faço para lidar com essa situação?

Estou tentando criar uma regra de regravação semelhante a essa regra do RedirectMatch (que só funciona se eu desativar o ProxyPass):

RedirectMatch ^/(?i)myagency   "/myapp?agency=MyAgency%20LA"

Além disso, outra coisa estranha que encontrei, que pode fornecer informações sobre o meu problema, foi publicada aqui .

    
por djangofan 27.04.2011 / 22:35

3 respostas

2

Ok, finalmente descobri por mim mesmo. O protocolo AJP funciona de maneira diferente das regras de tipo HTTP e, portanto, elas não se misturam. Para resolvê-lo, eu tive que parar de redirecionar tudo para o AJP e apenas redirecionar o aplicativo usando apenas o AJP. Aqui estava a resposta:

# don't ProxyPass through the "/" dir location,
# since it breaks the mod_rewrite rules
<Location /myapp>
    ProxyPass ajp://localhost:8009/myapp
    ProxyPassReverse ajp://localhost:8009/myapp
</Location>
RewriteEngine On
# rule to redirect from http to https
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
# rule to redirect /  to the app context since nothing is served at /
Redirect /  /myapp?name=
# supplemental rules to handle URI shortcuts
RedirectMatch ^/(?i)name1   /myapp?name=NameOne
RedirectMatch ^/(?i)name2   "/myapp?name=Name%20Two"
    
por 29.04.2011 / 00:58
1

Você poderia converter suas diretivas ProxyPass e ProxyPassReverse em diretivas RewriteRule, usando [P] para fazer proxy na solicitação, assim:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteRule (.*) ajp://localhost:8009/$1 [P]
    
por 27.04.2011 / 22:54
-1
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule rewrite_module modules/mod_rewrite.so

RewriteEngine On
RewriteRule  ^/$  /index.html  [L]

# RequestHeader set REMOTE_USER %{LA-U:REMOTE_USER}e
RewriteCond %{REQUEST_URI} !^/fusioncp
ReWriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteRule ^(.*) ajp://localhost:18009$1 [P]
    
por 25.01.2015 / 11:01