Apache VHOST and PROXY clamping
Imagine an apache2 vhost that acts as a proxy-frontend to a tomcat backend/application server. The apache vhost is listening on a public IP on port 80, while tomcat is listening on port 8080 on localhost only.
The appropriate working vhost for this situation would look like this:
<VirtualHost 188.8.131.52:80> ServerName www.example.com ProxyRequests Off ProxyPreserveHost On <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ </VirtualHost>
The customer wants to serve additional files from the same vhost with apache. Those files are static files and will serve some kind of addition to the application servers ressources - i.e. some more fancy icons…
My solution to this would be to fork the apache to listen on localhost at a hidden port, forward all requests to the static files to this proxy backend.
The apache configuration will look like this:
Apache 184.108.40.206:80 |-----> /static/* |-----> Apache 127.0.0.1:8888 /path/to/static/files/ |-----> /* |-----> Tomcat 127.0.0.1:8080 application server
I need to expand the vhost file above to look like this:
<VirtualHost 220.127.116.11:80> ServerName www.example.com ProxyRequests Off ProxyPreserveHost On <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ RewriteEngine On RewriteRule ^/static/(.*) http://127.0.0.1:8888/$1 [P,QSA,L] </VirtualHost> Listen 8888 NameVirtualHost 127.0.0.1:8888 <VirtualHost 127.0.0.1:8888> ServerName 127.0.0.1 DocumentRoot /path/to/static/files/ <Directory /path/to/static/files/> Options FollowSymLinks -Indexes IncludesNoExec AllowOverride All </Directory> </VirtualHost>
Why you might ask am i doing this. Because adding a alias or RewriteRule is not sufficient enough, every request would be still sent to the backend server (tomcat).
A bit complicated though. And mostly overkill as i found out a day later. See my other article here.