Serveur Web · 4 min read · Jan 01, 2026

Mettre Varnish devant Apache sur Ubuntu/Debian

Mettre Varnish devant Apache sur Ubuntu/Debian

Version 1.0, 15-10-2010
Suivez-moi sur Twitter

Varnish est un “accélérateur web” open source que vous pouvez utiliser pour accélérer votre site web.

Il peut mettre en cache certains éléments statiques, tels que des images ou du javascript, mais vous pouvez également l’utiliser à d’autres fins telles que l’équilibrage de charge ou une sécurité supplémentaire.

Dans ce tutoriel, nous nous concentrerons sur cette dernière.
Dans ce mode, Varnish empêchera les requêtes HTTP incomplètes d’atteindre votre serveur web Apache.

Ce tutoriel est construit sur Ubuntu, mais fonctionnera probablement aussi sur Debian.

Tout d’abord, assurez-vous que vous exécutez Apache2 et que vous l’avez configuré.

Installer Varnish

C’est plutôt facile, car il est dans le dépôt Ubuntu. Cependant, vous voudrez peut-être utiliser le dépôt Varnish pour vous assurer d’avoir une version plus récente. Pour ajouter celui-ci, exécutez ceci :

sudo curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
sudo echo "deb http://repo.varnish-cache.org/debian/ $(lsb_release -s -c) varnish-2.1" >> /etc/apt/sources.list

Mettez à jour APT et installez Varnish :

sudo apt-get update
sudo apt-get install varnish

Super, maintenant vous avez Varnish mais nous devons encore le configurer.

Changer les paramètres de Varnish

Tout d’abord, nous devons changer le port par défaut. Éditez /etc/default/varnish :

vim /etc/default/varnish

Faites défiler un peu vers le bas, jusqu’à ce que vous trouviez une ligne non commentée commençant par “ DAEMON_OPTS “.

  • Changez :6081* en :80* afin qu’il écoute sur le port HTTP par défaut.
  • éditez default.vcl pour quelque chose d’autre, j’ai pris “mysite.vcl”.

Enregistrez le fichier.

Éditez le fichier VCL que vous avez mentionné dans le fichier précédent. Dans mon cas, je vais éditer /etc/varnish/mysite.vcl. Collez le contenu suivant :

## Rediriger les requêtes vers Apache, fonctionnant sur le port 8000 sur localhost
backend apache {
        .host = "127.0.0.1";
        .port = "8000";
}
## Récupérer
sub vcl_fetch {
        ## Supprimer l'en-tête X-Forwarded-For s'il existe.
        remove req.http.X-Forwarded-For;
        
        ## insérer l'adresse IP du client comme X-Forwarded-For. C'est l'adresse IP normale de l'utilisateur.
        set    req.http.X-Forwarded-For = req.http.rlnclientipaddr;
        ## Sécurité supplémentaire, les attaques "w00tw00t" sont assez ennuyeuses donc bloquons-les avant qu'elles n'atteignent notre serveur web
        if (req.url ~ "^/w00tw00t") {
                error 403 "Non autorisé";
        }
        ## Livrer le contenu
        return(deliver);
}

## Livrer
sub vcl_deliver {
        ## Nous allons cacher certains en-têtes ajoutés par Varnish. Nous voulons nous assurer que les gens ne voient pas que nous utilisons Varnish.
              ## Puisque nous ne mettons pas en cache (encore), pourquoi s'embêter à dire aux gens que nous l'utilisons ?
        remove resp.http.X-Varnish;
        remove resp.http.Via;
        remove resp.http.Age;
        
        ## Nous aimerions cacher les en-têtes X-Powered-By. Personne ne doit savoir que nous pouvons exécuter PHP et avoir la version xyz de celui-ci.
        remove resp.http.X-Powered-By;
}

Enregistrez le fichier. Très bien, c’était la partie Varnish. Ne le démarrez pas encore.

Changer les paramètres d’Apache

D’accord, nous devons laisser Apache2 écouter sur localhost. Pour cela, quelques petits changements sont nécessaires.

vim /etc/apache2/ports.conf

Changez :

NameVirtualHost *:80
Listen 80

En :

NameVirtualHost *:8000
Listen 127.0.0.1:8000

Apache écoutera sur ce port. Vous devrez également éditer vos vhosts. Ouvrez votre(vos) vhost(s) et remplacez

par

Jusque-là tout va bien. Nous devons maintenant installer un module Apache supplémentaire pour nous assurer que l’adresse IP de l’utilisateur se termine correctement. Puisque Varnish communique essentiellement avec Apache2, vous verriez 127.0.0.1 comme IP de visiteur.

apt-get install libapache2-mod-rpaf

Le module RPAF (Reverse Proxy Add Forward) s’assurera que l’IP de 127.0.0.1 sera remplacée par l’IP définie dans X-Forwarded-For définie par Varnish.

Redémarrer les démons

Redémarrez Apache :

/etc/init.d/apache2 restart

Vérifiez s’il est lié à l’IP/Port correct en exécutant :

netstat -lp | grep apache2

Si vous voyez :

tcp        0      0 localhost:8000          *:*                     LISTEN      4586/apache2

C’est correct. Sinon, vous avez fait une erreur. Très bien, maintenant nous devons redémarrer Varnish pour le laisser écouter sur le port 80.

/etc/init.d/varnish restart

Nous vérifions cela à nouveau en exécutant :

netstat -lp | grep varnish

Le résultat sera :

tcp        0      0 *:www                   *:*                     LISTEN      4498/varnishd  
tcp6       0      0 [::]:www                [::]:*                  LISTEN      4498/varnishd

(Oui, varnish écoute également sur n’importe quelle adresse IPv6).

Alors.. Maintenant nous avons placé Varnish devant Apache2. Nous pouvons tester si le site fonctionne toujours en le visitant simplement. Vous verrez le site, comme si rien ne s’était passé. Vous pouvez tester cela davantage en éteignant apache. Vous verrez alors une page d’erreur Varnish.

Fonctionnalités bonus

Eh bien, vous voudrez peut-être changer le nom du serveur HTTP de “Apache” à autre chose. Cela peut être fait en éditant votre fichier VCL, situé dans /etc/varnish. Après :

sub vcl_fetch {

Ajoutez :

## Supprimer l'en-tête http.Server
unset obj.http.Server;
## Changer l'en-tête http.Server en quelque chose d'autre
set obj.http.Server = "Incognito";

Évidemment, vous pouvez le faire ressembler à ce que vous voulez. Votredomain.com par exemple. Veuillez noter que tous les domaines sur ce serveur utiliseront le même nom de serveur.

Eh bien, c’est tout. Vous avez maintenant un proxy inverse devant votre Apache !
Avec un peu de réglage, vous pouvez le laisser mettre en cache ou équilibrer la charge.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.