Apache rewrite request using a different forward proxy

apache, forward, mod-rewrite, proxy

Solution

I found a solution, its not really elegant. It involves some adaptation on the second server as well.

It derives from a project where I had a similar problem, but needed the servers to be "fully" (selected by a custom script that uses database resources).

This should at least work (I run my URL through a rewrite map to modify it, I adapted it to use headers using `RewriteCond`).

# example for server number "5" in your remote proxy network
RewriteCond %{HTTP:X-CUSTOM-HEADER} 1
RewriteRule http://([a-z0-9\.]+)/(.*) http://$1.5.server.yourdomain.com$1 [P] 
ProxyRemoteMatch .*\.5\.server\.yourdomain\.com.* http://5.server.yourdomain.com:80

You basically adapt the URL so it is a subdomain of your second server, then you strip it out again. This part goes on the second (remote proxy server):

<ProxyMatch "http://.*\.[0-9]+\.server\.yourdomain\.com/.*">
    RewriteEngine on
    RewriteRule (proxy:http[s]?://.+)\.[0-9]+\.server\.premiumize\.me(.+) $1$2 
    ... your code ...
</ProxyMatch>

Problem

I would like to forward a request in Apache, based on a request header, to a different forward proxy. I think the best would be to use mod_rewrite, but it can use only a reverse proxy defined in the same apache configuration. I also checked the ProxyRemote property of mod_proxy but it can't be used based on conditions, only based on request url's. I need something like: If X-CUSTOM-HEADER is value-1 -> forward request to forward proxy p1 If X-CUSTOM-HEADER is value-2 -> forward request to forward proxy p2 etc. Din anyone managed to make something like this? Thanks, Alin

Original source