Le module mod_proxy d'Apache permet de rendre visible des serveurs Web d'un réseau privé aux clients d'un autre réseau (publique par exemple).
La situation classique est d'avoir un serveur A dans une DMZ et un serveur B dans un réseau privé ; un client venant d'Internet (par exemple) ne pourra pas voir le serveur B et devra passer par A (qui fera office de proxy) pour voir le contenu de B.
Client ------ Serveur A ------ Serveur B
Dans ce cas, le serveur A portera 2 noms différents (configuré sur la même IP) et renverra le contenu associé aux noms.
Par exemple :
Si le client demande le contenu de a.exemple.org alors le serveur A renverra le contenu local, si le client demande le contenu de b.exemple.org alors le serveur A servira de proxy et renverra le contenu fournit par B.
La différenciation se fait sur la directive ServerName. On déclare des hôte virtuel sur l'IP du serveur A, et pour chaque hôte on associe un ServerName différent. Les ServerName doivent être de vrais noms renseigné dans le DNS, avec lesquels un client peut se connecter sur le sevreur A.
NameVirtualHost 123.456.789.123:80
<VirtualHost 123.456.789.123:80>
ServerName a.exemple.org
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
<VirtualHost 123.456.789.123:80>
ServerName b.exemple.org
ProxyRequests Off
ProxyPreserveHost Off
ProxyPass / http://192.168.0.1/
ProxyPassReverse / http://192.168.0.1/
<Proxy *>
Order Deny,Allow
Allow from all
</Proxy>
</VirtualHost>
Dans ce cas l'ensemble du contenu de B sera visible par une URL spéciale, dédié à B, par exemple a.exemple.org/b.
Dans notre exemple :
NameVirtualHost 123.456.789.123:80
<VirtualHost 123.456.789.123:80>
ServerName a.exemple.org
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
# Suppresses the Via header
ProxyVia Off
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /b/ http://192.168.0.1/
ProxyPassReverse /b/ http://192.168.0.1/
</VirtualHost>