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>
