Reverse PROXY avec Squid 3.0
Il y’a plusieurs bonnes raisons de mettre en place un reverse proxy, dans notre exemple, on va s’en servir pour mettre en cache certains fichiers tels que les .css, .js, les images et même des fichiers volumineux. Deplus, il va nous permettre de faire pointer une seule IP externe sur plusieurs serveurs web internes en jouant avec les sous domaines.
Pourquoi j’ai choisi de mettre en place cette solution? Mon serveur apache (qui héberge cette page) se trouve à la maison avec une connexion ADSL dont l’upload est limité à 1024 Kb/s max. Cela signifie que les visiteurs (vous) téléchargent les différents éléments de mon site à 128 Ko/s max, en admettant qu’il ne se passe rien d’autre sur ma modeste connexion.
J’ai donc eu l’idée d’utiliser ma dedibox (qui dispose d’une connexion à 100Mb/s) comme reverse proxy avec squid3.0 afin de metre en cache tout les éléments statiques plus ou mons volumineux de mon site.
Dans ce schéma, on comprend l’acheminement des requêtes clientes avec le reverse proxy mileu qui va mettre en cache les éléments statiques en réponse.
Note: une compression est activée sur le lien VPN, cela permet un débit montant jusqu’à 250 Ko/s au lieu des 128 Ko/s.
Lorsqu’un élément (statique) est demandé pour la premiére fois, il sera téléchargé à la vitesse (UP) de ma connexion, c’est à dire 128 Ko/s. Squid va le mettre en cache, puis à la deuxiéme requête, il vérifie si l’élément n’a pas été modifié et si ce n’est pas la cas, il renvoie ce dernier au client à la vitesse max de 100 Mb/s (~12 Mo/s).
Un exemple en images avec un fichier d’environ 10 Mo:

premiere requete

- seconde requete
Au niveau des logs de Squid on retrouve ces deux téléchargements:
26/Nov/2009:02:14:13 +0100.632 84.xxx.23.135 TCP_MISS/200 10120957 GET http://blog.canardwc.com/test.zip - DEFAULT_PARENT/sl01 application/zip 26/Nov/2009:02:18:45 +0100.534 84.xxx.23.136 TCP_REFRESH_UNMODIFIED/200 10120956 GET http://blog.canardwc.com/test.zip - DEFAULT_PARENT/sl01 application/zip
« TCP_MISS »: l’objet demandé n’est pas dans le cache.
« TCP_REFRESH_UNMODIFIED »: l’objet est en cache et n’a pas été modifié.
Installation de Squid3.0:
J’ai choisi de compiler les sources moi même car la version 3 de Squid n’était pas disponible depuis les dépôts Debian. (les sources sont disponibles un peu plus bas)
# wget http://blog.canardwc.com/wp-content/uploads/2009/11/squid-3.0.STABLE16.tar.gz # tar xvzf squid-3.0.STABLE16.tar.gz # cd squid-3.0.STABLE16/ # ./configure --localstatedir=/var --prefix=/usr --includedir=/usr/include --datadir=/usr/share --bindir=/usr/sbin --libexecdir=/usr/lib/squid --exec-prefix=/usr --sysconfdir=/etc/squid --enable-x-accelerator-vary --with-default-user=squid # make # make install # useradd squid # mkdir -p /var/log/squid && chown squid: /var/log/squid # mkdir -p /var/cache/squid && chown squid: /var/cache/squid # wget http://blog.canardwc.com/wp-content/uploads/2009/11/reverse-proxy.init.zip # unzip reverse-proxy.init.zip # cp reverse-proxy /etc/init.d/ # chmod +x /etc/init.d/reverse-proxy # update-rc.d reverse-proxy defaults
Configuration de Squid3.0 en mode reverse proxy:
Rendez-vous dans le répertoire /etc/squid pour créer notre fichier de configuration que nous nommerons reverse-proxy.conf.
# cd /etc/squid/ # vi reverse-proxy.conf
acl manager proto cache_object acl localhost src 127.0.0.1/32 acl to_localhost dst 127.0.0.0/8 acl all src acl Safe_ports port 80 # http http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access allow all icp_access deny all htcp_access deny all ## Squid écoute sur l'interface 88.191.97.6 et le port 80 en mode "accel vhost" http_port 88.191.97.6:80 accel vhost ## On définit respectivement les sous domaines pour chacune des machines sl01 et sl06 acl dest_site_sl01 dstdomain blog.canardwc.com acl dest_site_sl06 dstdomain cacti.canardwc.com ## On définit les adresses internes de nos deux serveurs... acl dest_addr dst 10.0.1.5 10.0.1.11 ## ...ainsi que le port de destination acl dest_port port 80 ## et on autorise le flux. http_access allow dest_addr dest_port ## On définit sl01 comme un "proxy" parent cache_peer 10.0.1.5 parent 80 0 name=sl01 no-query originserver default ## et on autorise seulement les sous domaines qui lui sont propores cache_peer_access sl01 allow dest_site_sl01 ## Idem pour sl06 cache_peer 10.0.1.11 parent 80 0 name=sl06 no-query originserver default cache_peer_access sl06 allow dest_site_sl06 ## Utile pour transférer l'IP du client d'origine au serveur web interne ## voir http://blog.canardwc.com/recuperer-ip-client-derriere-un-reverse-proxy-dans-log-apache.html forwarded_for on hierarchy_stoplist cgi-bin ? ## Squid va utiliser 1Go de RAM pour son cache cache_mem 1024 MB ## Les éléments de plus de 2048Ko ne seront pas "caché" en RAM maximum_object_size_in_memory 2048 KB memory_replacement_policy lru ## Squis va utiliser jusqu'à 2Go dans /var/cache/squid pour le cache disque cache_dir ufs /var/cache/squid 2048 16 256 ## tout les élément "cachables" seront mis en cache minimum_object_size 0 KB ## Les éléments de plus de 64096Ko ne seront pas "caché" maximum_object_size 64096 KB cache_replacement_policy lru logformat squid %tl.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %un %Sh/%<A %mt access_log /var/log/squid/reverse-proxy_access.log squid cache_log /var/log/squid/reverse-proxy_cache.log cache_store_log /var/log/squid/reverse-proxy_store.log pid_filename /var/run/reverse-proxy.pid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern (cgi-bin|\?) 0 0% 0 refresh_pattern . 0 20% 4320 ## Renseignez le nom de votre serveur visible_hostname sl03.wenske.local ## Votre Email cache_mgr votre@adresse.mail coredump_dir /var/cache
Ceci est mon fichier de configuration, les commentaires devraient vous permettre de l’adapter à vos besoins.
Initialisation et démarrage de Squid3.0:
Il ne reste plus qu’à créer les répertoires du cache:
# squid -z -f /etc/squid/reverse-proxy.conf
… et démarrer Squid:
# /etc/init.d/reverse-proxy start
Voilà, on a maintenant un reverse proxy qui accélère vos pages web et qui gère deux sous domaines avec la même IP pour deux serveurs web internes distincts.

Winamp or similar
Windows Media Player
Bonjour,
Je suis une stagiaire je veux savoir si vous pouvez m’aidé; j’ai installer un fedora sur mon machine vertuelle le problème que si je veux installé ou configurer un squid alors la j’ai trouvé un probleme il se marche pas avec un autre probleme malheuresement; après l’installation de fedora et quand j’arrive a cet niveau :1679 paquetages traités sur 1679 la machine va resté a cet niveau alors la je suis obligué de faire reset pour passé a l’autre partie de l’installation
svp j’ai besoin de votre aide car je suis un stagaire et en train de faire mon projet fin d’etude
merci d’avance