Reverse Proxy with Apache ProxyPass redirects instead of transparently passing through

Matthias Kempka picture Matthias Kempka · May 25, 2012 · Viewed 22.2k times · Source

I got a web application running inside a Tomcat at http://<server>:8080/app/portal/. I want the world to see this application through the URL http://<server>/portal/.

To do this, I set up a Reverse Proxy with Apache 2.2. According to the documentation for ProxyPass I expect the reverse proxy to pass all requests through transparently. My browser should never know about the Tomcat URL.

Here is my configuration:

No virtual hosts, I added these lines to my httpd.conf

<Location /portal/>
    AllowOverride All
    RewriteEngine On
    ProxyPass  http://server:8080/app/portal/
    ProxyPassReverse http://server:8080/app/portal/
 </Location>

When I use Firefox to open http://<server>/portal/, I get a 302 Moved Temporarily, and all follow-up calls go from my browser directly to http://<server>:8080/app/portal/. My browser points to this URL.

This is not what I expected of a Reverse Proxy. Did I do the configuration wrong or did I misunderstand the purpose of Reverse Proxies? What should I do to get my desired behavior?

Answer

Matthias Kempka picture Matthias Kempka · May 31, 2012

I tried to comment the answer from davidethell, but could not get the lines correctly formatted, so here is what I found out:

The problem was that the reverse proxy seems only to work to the URL where the War is deployed in my Tomcat, and NOT to the servlet inside the Tomcat. This leads to 2 rewrites, one of them the reverse proxy and one just rewriting everything behind that.

RewriteEngine On
RewriteRule   ^/portal/$ /portal/portal
RewriteRule   ^/portal(.+) http://<server>:8080/app$1 [P]