Accueil > Howto > Reverse PROXY avec Squid 3.0

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.

 

schéma reverse-proxy

schéma reverse-proxy

 

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

premiere requete

 

seconde 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.

 

Download squid-3.0.STABLE16.tar
Download reverse-proxy.init

Categories: Howto Tags: , ,
  1. 19/02/2010 à 11:40 | #1

    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

  1. Pas encore de trackbacks