Cette technique du proxy transparent est quelques peu différents des proxy que l'on a l'habitude de voir.

Ce dernier permettra à partir d'une URL connu et fixe (exemple: http://google.gcu.org)
d'avoir l'étendu du site en arrière plan sans forwarding (aka “l'URL dans la barre change de
http://google.gcu.org” en “http://google.fr”).

Pour l'exemple, le proxy sera implémenté sur un serveur en production. Directement connecté au Web (ou DMZ + Port forwarding)

Dans la configuration DNS, nous avons une définition de ce type :

google.gcu.org.      IN   A   209.238.159.117 ; www.gcu

Le proxy transparent sera intégré sur un Apache. Peu importe la version, la configuration est la même. Cependant, pour les besoins de l'astuce, cela a été testé sur un Apache2

Tout d'abord, définissez les modules suivants dans (votre|vos) fichier(s) de configuration :

-------------------------------------------------------
LoadModule cache_module /usr/lib/apache2/modules/mod_cache.so
LoadModule disk_cache_module /usr/lib/apache2/modules/mod_disk_cache.so
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
-------------------------------------------------------

Tout de suite après, définissez un vhost “catch-all” cela permet d'évitez à des gens de définir sur leur propre DNS, votre proxy comme accès, de tomber sur le premier vhost défini et de faire n'importe quoi sur le site en background

-------------------------------------------------------
<VirtualHost *>
        ErrorLog /var/log/apache2/main_error.log
        DocumentRoot /dev/null
        <Location />
                ProxyPass http://perdu.com
                SetEnv force-proxy-request-1.0 1
                SetEnv proxy-nokeepalive 1
                Allow from all
        </Location>
</VirtualHost>
-------------------------------------------------------

Le premier Vhost est défini pour être un proxy pour perdu.com.

Le site n'est qu'à titre d'exemple. Son intérêt réside … sur le message humoristique sous-jacent.

Vous pouvez parfaitement placer un vhost “catch-all” sans proxy. Avec une simple page par défaut
- sur votre système - en modification le “DocumentRoot” et en supprimant la partie “Location”.

Après coup, vous pouvez définir tout vos vhost-proxy comme-ceci :

-------------------------------------------------------
<VirtualHost *>
        ServerName nomdedomaine.tld
        ServerAlias www.nomdedomaine.fr
        ErrorLog /var/log/apache2/n/o/nomdedomaine.tld.error.log
        CustomLog /var/log/apache2/n.o/nomdedomaine.tld.access.log common
 
        ProxyRequests on
        ProxyPreserveHost Off
        ProxyVia On
 
        <Location />
                ProxyPass http://www.google.fr/
                ProxyPassReverse http://www.google.fr/
                SetEnv force-proxy-request-1.0 1
                SetEnv proxy-nokeepalive 1
                Allow from all
        </Location>
</Virtualhost>
-------------------------------------------------------

Les options Proxy* permettent d'activer et de contrôler le module proxy pour cette configuration.

Notez cependant que “ProxyPreserveHost Off” cache la véritable URL final.
Si vous ne voulez qu'une simple redirection, mettez cette option à “On” ou utilisez “mod_rewrite”
(qui demande moins de ressources)

Pour la suite, c'est selon votre imagination…

unix/proxy_transparent_apache.txt · Last modified: 2010/01/12 13:29 (external edit)