How to proxy context to different backend context in apache

5,904

Solution 1

Your source location is /myapp, while your ProxyPassReverse is for /myapp/; context of the proxied location doesn't match, so the ProxyPassReverse doesn't apply.

Why the mod_rewrite proxy? This should accomplish the same, and have no trailing slash consistency issues:

ProxyPass /myapp http://backend-server:8000
ProxyPassReverse /myapp http://backend-server:8000

Solution 2

I had same problem and fix it as follow:

For some reason both context path must be the same so, I mod my application context path to be the equal (note extra "/" on passResever)

    ProxyPass               /jira           http://192.168.1.30:8080/jira
    ProxyPassReverse        /jira/          http://192.168.1.30:8080/jira
Share:
5,904

Related videos on Youtube

Toff'
Author by

Toff'

My Blog - www.upgradingdave.com JavaJing (My Java Tutorial Site)

Updated on September 18, 2022

Comments

  • Toff'
    Toff' almost 2 years

    I'd like to configure apache so that http://my-domain.com/myapp serves a Python webapp running in CherryPy on a backend server.

    Here's what's in the vhost:

        RewriteRule ^/myapp/?(.*) http://backend-server:8000/$1 [P]
        ProxyPassReverse /myapp/ http://backend-server:8000/
    

    When I trace the request/response, I see:

    GET /myapp HTTP/1.1
    Host: my-domain.com
    

    And then:

    HTTP/1.1 303 See Other
    Date: Thu, 15 Sep 2011 21:46:35 GMT
    Server: CherryPy/3.1.2
    Content-Type: text/html;charset=utf-8
    Location: http://my-domain.com/somwhere-else/
    

    As you can see, the CherryPy webapp sends a 303 redirect to /somewhere-else/

    Any ideas why the Apache ProxyPassReverse doesn't transform the Location to http://my-domain.com/myapp/somewhere-else?

  • ravi yarlagadda
    ravi yarlagadda almost 13 years
    @Dave CherryPy might be getting sensitive about the Host: header - try adding ProxyPreserveHost on. Still, Apache should catch and translate that redirect, unless it doesn't think it should; is there anything different about the new URL versus the old? Host name (is there a www?), port, protocol - any difference in these things to the original request will cause Apache to leave the Location: header alone.