You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by mraible <ma...@raibledesigns.com> on 2007/04/16 23:28:08 UTC

Mixing Apache's mod_rewrite with mod_proxy

I want to configure Apache to front a Tomcat installation. I've done this in
the past with mod_jk. I've got that setup and working. I also configured
mod_proxy and got that working thanks to Graham King's excellent
instructions[1]. I don't know which one is a better solution, but I have
them both working, so I'm flexible.

Now onto my problem.  I'd like to use mod_write to rewrite some URLs for
doing A/B Testing. In other words, we'll deploy entirely new WAR files when
we have a test, then use the magic of Apache's mod_rewrite, mod_jk and
possible the UrlRewriteFilter to keep the URLs somewhat consistent between
version A and version B. Here's some questions I have for those folks who
might've done this before:

   1. Is it possible to use Apache's mod_rewrite to map
http://www.domain.com/?v=1 to http://www.domain.com/1 (this allows us to
have two different applications/wars served up to the same domain).
   2. If #1 is possible, I'm assuming it's possible to add a RewriteRule for
allowing the parameter to be anywhere in the query string?

I believe this is all possible. However, I am having difficulty getting
mod_jk to allow mod_rewrite to be processed first. If I have the following
in httpd.conf, it seems like htdocs/.htaccess gets bypassed.

JkMount /* loadbalancer

Likewise, if I use mod_proxy (config below) with RewriteRules in <Location
/>, the request is dispatched to Tomcat w/o processing the rules.

<Proxy balancer://tomcats>
   BalancerMember ajp://localhost:8009 route=tomcat1
   BalancerMember ajp://localhost:8010 route=tomcat2
</Proxy>

<Location />
    ProxyPass balancer://tomcats/ stickysession=JSESSIONID
</Location>
 
I've written this up in a blog post[2] as well, but figured this list is
probably the best place to get this question answered.

Thanks!

Matt

[1] http://www.darkcoding.net/software/goodbye-mod_jk-hello-mod_proxy/
[2] http://raibledesigns.com/rd/entry/mixing_apache_http_server_mod
-- 
View this message in context: http://www.nabble.com/Mixing-Apache%27s-mod_rewrite-with-mod_proxy-tf3587361.html#a10025094
Sent from the Tomcat - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: Mixing Apache's mod_rewrite with mod_proxy

Posted by mraible <ma...@raibledesigns.com>.
I got this working with mod_jk and the following configuration for
mod_rewrite:

RewriteEngine On

# http://domain/?v=1 --> http://domain/app1/?v=1
RewriteCond     %{QUERY_STRING}     v=([^&]+)
RewriteRule     ^(.*)$              /app%1/$1 [L]

# http://domain --> http://domain/app (default ROOT in Tomcat)
RewriteRule     ^$                  /app/ [L]

My mod_jk configuration is:

JkMount /app* loadbalancer

I tried to use mod_proxy and mod_proxy_ajp, but for some reason (with Apache
2.2.4 on OS X), I couldn't get the following to work (from httpd.conf):

<Proxy balancer://cluster>
    BalancerMember ajp://localhost:8009 route=tomcat1
    BalancerMember ajp://localhost:8010 route=tomcat2
</Proxy>

<Location ~ /app(.*)>
    Order Allow,Deny
    Allow from all
    ProxyPass balancer://cluster stickysession=JSESSIONID
    ProxyPassReverse /
</Location>

I tried LocationMatch as well, but no dice. Something about my configuration
doesn't seem to allow Location|LocationMatch to read the regular expressions
properly.

The nice thing about using mod_proxy is I could use mod_proxy_html to
rewrite all the outgoing links so they're the same as the incoming links
(notice my mod_rewrite configuration does not do redirects).

The problem I'm trying to solve now is how to round-robin between apps 1, 2
and 3.  If there's a "v" parameter or "v" cookie, I want to disable
round-robin-ing.  But otherwise, I want to assign an app so all the A/B
tests are used equally by anonymous users.

Matt

press wrote:
> 
> Hi Matt, See configuration below.  I hope this helps you - Clay
> 
> Test Cases for Requirement #1
> http://www.domain.com/?v=1	                                ->
> http://www.domain.com/1
> http://www.domain.com/?v=2	                                ->
> http://www.domain.com/2
> 
> Test Cases for Requirement #2
> http://www.domain.com/?q=foo&v=1                     ->
> http://www.domain.com/1
> http://www.domain.com/?v=1&q=foo                     ->
> http://www.domain.com/1
> http://www.domain.com/?p=bar&v=1&q=foo         -> http://www.domain.com/1
> 
> #mod_proxy_ajp, mod_proxy_balancer and mod_rewrite configuration
> 
> #webapp1 or webapp2 are deployed
> RewriteCond    %{QUERY_STRING}          (.*)v=(1|2)      
> RewriteRule     ^(.*)$                                 /%2/? [L,R]
> 
> #default to webapp1  for anything else
> RewriteCond    %{QUERY_STRING}           (.*)v=([^12])    
> RewriteRule     ^(.*)$                                 /1/?   [L,R]
> 
> 
> <Proxy balancer://cluster >
>     BalancerMember ajp://localhost:8009 route=tomcat1 
>     #BalancerMember ajp://localhost:8010 route=tomcat2
> </Proxy>
> 
> <Location /1 >
>     ProxyPass balancer://cluster/servlets-examples
> </Location>
> 
> <Location /2 >
>     ProxyPass balancer://cluster/jsp-examples
> </Location>
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Mixing-Apache%27s-mod_rewrite-with-mod_proxy-tf3587361.html#a10063745
Sent from the Tomcat - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: Mixing Apache's mod_rewrite with mod_proxy

Posted by press <pr...@yahoo.com>.
Hi Matt, See configuration below.  I hope this helps you - Clay

Test Cases for Requirement #1
http://www.domain.com/?v=1	                                ->
http://www.domain.com/1
http://www.domain.com/?v=2	                                ->
http://www.domain.com/2

Test Cases for Requirement #2
http://www.domain.com/?q=foo&v=1                     ->
http://www.domain.com/1
http://www.domain.com/?v=1&q=foo                     ->
http://www.domain.com/1
http://www.domain.com/?p=bar&v=1&q=foo         -> http://www.domain.com/1

#mod_proxy_ajp, mod_proxy_balancer and mod_rewrite configuration

#webapp1 or webapp2 are deployed
RewriteCond    %{QUERY_STRING}          (.*)v=(1|2)      
RewriteRule     ^(.*)$                                 /%2/? [L,R]

#default to webapp1  for anything else
RewriteCond    %{QUERY_STRING}           (.*)v=([^12])    
RewriteRule     ^(.*)$                                 /1/?   [L,R]


<Proxy balancer://cluster >
    BalancerMember ajp://localhost:8009 route=tomcat1 
    #BalancerMember ajp://localhost:8010 route=tomcat2
</Proxy>

<Location /1 >
    ProxyPass balancer://cluster/servlets-examples
</Location>

<Location /2 >
    ProxyPass balancer://cluster/jsp-examples
</Location>


-- 
View this message in context: http://www.nabble.com/Mixing-Apache%27s-mod_rewrite-with-mod_proxy-tf3587361.html#a10063037
Sent from the Tomcat - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org