I did this a few times in my life, and every time it was painful to reconstruct the necessary toolset and configuration options. So, here it goes. First, enable the proxy support.
~# a2enmod proxy # utility functions ~# a2enmod proxy_http # http forwarding ~# a2enmod proxy_html # html rewriting ~# a2enmod headers # http headers rewriting
Then, assuming that your web application runs on port 3031 on the same host as Apache, and you want to make it available at the /demo url in Apache, write the following in the Apache config:
<IfModule mod_proxy.c> <IfModule mod_proxy_http.c> <IfModule mod_proxy_html.c> <IfModule mod_headers.c> ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /demo http://localhost:3301 ProxyPassReverse /demo http://localhost:3301 <Location "/demo"> # ask the localhost to return the uncompressed HTML RequestHeader unset Accept-Encoding # Filter Responses through mod_proxy_html SetOutputFilter proxy-html # convert URLs in CSS and JavaScript as well ProxyHTMLExtended On # convert URLs in a.hrefs ProxyHTMLURLMap ^/ /demo/ R # convert URLs in CSS and JS ProxyHTMLURLMap "'/" "'/demo/" # convert URLs in CSS and JS ProxyHTMLURLMap "\"/" "\"/demo/" </Location> </IfModule> </IfModule> </IfModule> </IfModule>