How to rewrite / proxy an Apache URI to an application listening on a specific port / server?

33,729

Using mod_proxy would work just fine. For instance, I mapped https://localhost/yalla/ to point to a subdirectory of my webserver:

LoadModule proxy_module modules/mod_proxy.so
ProxyRequests On
<Proxy *>
      Order deny,allow
      Allow from localhost
</Proxy>
ProxyPass /yalla/ http://yalla.ynfonatic.de/tmp/

If you implement this, you'll note that the pictues of the directory-listing aren't visible; this is because they're below the /tmp/ directory on the remote server, hence not visible.

So, in your case you'd do:

LoadModule proxy_module modules/mod_proxy.so
ProxyRequests On
<Proxy *>
      Order deny,allow
      Allow from localhost # Or whatever your network is if you need an ACL
</Proxy>
ProxyPass /app/ http://hostname.example.com:8080/

Like with everything in Apache configuration, watch those trailing slashes when referring to directories.

Good luck! Alex.

Share:
33,729
Alex Leach
Author by

Alex Leach

PhD student in Computational Biology, University of York, UK.

Updated on September 24, 2020

Comments

  • Alex Leach
    Alex Leach over 3 years

    They say that Apache's mod_rewrite is the swiss-army knife of URL manipulation, but can it do this?

    Lets say I want to add a new application to my Apache webserver, where the only configurable option of the app is a port number.

    I want to use & give out URLs of the form "http://hostname.example.com/app" rather than "http://hostname.example.com:8080". This would ensure that clients would be getting through the institution's firewall as well, and it's generally tidier.

    My application includes absolute URIs in php, javascript and css, so I want to prepend my own root location to the URI in the applications internal links. I have no access to DNS records and so can't create another name-based virtual server.

    Using Apache's mod_rewrite and mod_proxy modules, I can transparently redirect a client to the correct home-page of the application. But links within that homepage don't point a client to links relative to the new base URL.

    So, what's the best way of proxying a request to an application that is listening on a specific port?

    For example, if I had an application listening on port 8080, I could put this in my Apache configuration:-

    <VirtualHost *:80>
        SSLProxyEngine On
        ServerName myhost.example.com
        RewriteEngine On
        UseCanonicalName On
        ProxyVia On
        <Location "/application">
            RewriteRule ^/application/?(.*) http://localhost:8080/$1 [P,L]
        </Location>
    </VirtualHost>
    

    This would work fine if the application didn't use absolute URLs, but it does. What I need to do is rewrite URLs that are returned by the application's css, javascript and php.

    I've looked at the ProxyPass and ReverseProxyPass documentation, but I don't think these would work..?

    I've also come across Nick Kew's mod_proxy_html, but this isn't included in the standard Apache Distribution, and my institution's webserver seems to have been fine for years without it.. Other than trawling manually (or using a grep -r | sed type expression) through the application's source code, or using this 3rd party add-on, are there any other ways to go about this?

    Could I perhaps use some of the internal server variables in a mod_rewrite rule? For example a rewrite rule based on ’HTTP_REFERER'?

  • Alex Leach
    Alex Leach over 12 years
    Looks like this could work. Ta! Was looking at mod_proxy this morning actually, to see about auto-proxying my home network through the uni's one.. That's completely different functionality from this though. Will let you know how I get on. Cheers! Alex
  • Natus Drew
    Natus Drew about 9 years
    This seems to drop preflight options requests
  • Alexander Janssen
    Alexander Janssen about 9 years
    @nathan For that you might need some mod_rewrite sauce; I never stumbled upon that error, but a quick search revealed this link: songbard.wordpress.com/2011/05/27/… - not sure, if that helps, but feedback is welcome. YMMV.
  • B Medeiros
    B Medeiros over 7 years
    ProxyRequests on seems a dangerous mistake: httpd.apache.org/docs/current/mod/mod_proxy.html#proxyreques‌​ts