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.listMettez à jour APT et installez Varnish :
sudo apt-get updatesudo apt-get install varnishSuper, 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/varnishFaites 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.confChangez :
NameVirtualHost *:80
Listen 80En :
NameVirtualHost *:8000
Listen 127.0.0.1:8000Apache é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-rpafLe 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 restartVérifiez s’il est lié à l’IP/Port correct en exécutant :
netstat -lp | grep apache2Si vous voyez :
tcp 0 0 localhost:8000 *:* LISTEN 4586/apache2C’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 restartNous vérifions cela à nouveau en exécutant :
netstat -lp | grep varnishLe 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.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.