Dynamic Reverse proxy with Apache 2

apache-2.2reverse-proxy

Hope you can help me with this one, I have an apache server configured as a reverse proxy for some domains. They point to and iis server and also have some php sites as virtualhost in the same machine.

For the reverse proxy I did this:

<VirtualHost *:80>
    ServerName reverseprox1
    ServerAlias site1.domain.com
    ProxyRequests Off
    ProxyPass / http://site1.domain.com/
    ProxyPassReverse / http://site1.iisserver.internald.com/
    ProxyPassReverseCookieDomain site1.iisserver.internald.com site1.domain.com
</VirtualHost>
<VirtualHost *:80>
    ServerName reverseprox2
    ServerAlias site2.domain.com
    ProxyRequests Off
    ProxyPass / http://site2.domain.com/
    ProxyPassReverse / http://site2.iisserver.internald.com/
    ProxyPassReverseCookieDomain site2.iisserver.internald.com site2.domain.com
</VirtualHost>
...

Works fine, but now i need to add about 20 testing sites (with random names, not only site1,site2,site3, etc) pointing to the iis server.
Is there a way to make this dynamic? I.E. It detects the site2 of site2.domain.com and point it to site2.iisserver.internald.com.

I can not use squid.

Here is my try, but failing miserably so far

<VirtualHost *:80>
    ServerName default
    ServerAlias  domain.com
    ProxyRequests Off
    RewriteEngine on
    RewriteCond %{HTTP_HOST} (.+)\.domain\.com
    ProxyPass / http://%1.domain.com/
    ProxyPassReverse / http://%1.iisserver.internald.com/
    ProxyPassReverseCookieDomain %1.iisserver.internald.com %1.domain.com
</VirtualHost>

Thanks very much for your help

Best Answer

What's wrong with a two liner like:

The 1-21 case.

#!/bin/bash

while [[  $(( $i < 21 )) != 0 ]]; do
  cat << EOF
  <VirtualHost *:80>
    ServerName reverseprox$i
    ServerAlias site$i.domain.com
    ProxyRequests Off
    ProxyPass / http://site$i.domain.com/
    ProxyPassReverse / http://site$i.iisserver.internald.com/
    ProxyPassReverseCookieDomain site$i.iisserver.internald.com site$i.domain.com
  </VirtualHost>
EOF
  i=$(( $i + 1 ))
done

The anything - case.

It prints all the records you need to add to your conf file.

#!/bin/bash
#Read a file, or query a db somewhere.
for i in  $(cat /path/to/namelist); do
  cat << EOF
  <VirtualHost *:80>
    ServerName reverseprox$i
    ServerAlias $i.domain.com
    ProxyRequests Off
    ProxyPass / http://$i.domain.com/
    ProxyPassReverse / http://$i.iisserver.internald.com/
    ProxyPassReverseCookieDomain $i.iisserver.internald.com $i.domain.com
  </VirtualHost>
EOF
done
Related Topic