Varnish ne supporte pas le https, si vous voulez quand même l’utiliser il faut mettre un autre reverse-proxy devant qui supporte le https.
On peut utiliser pound.
– Installation :
apt-get install pound
– Activation :
sed -i 's/startup=0/startup=1/' /etc/default/pound
– Configuration /etc/pound/pound.cfg :
## see pound(8) for details User "www-data" Group "www-data" LogLevel 0 Alive 30 TimeOut 120 ConnTO 5 Grace 120 Control "/var/run/pound/poundctl.socket" ## listen, redirect and ... to: ListenHTTPS Address 0.0.0.0 Port 443 Cert "/etc/ssl/blog.jeremm.fr.pem" xHTTP 0 AddHeader "X-Forwarded-Proto: https" Service BackEnd Address 127.0.0.1 Port 80 End Session Type IP TTL 60 End End End
– Le fichier pem doit contenir dans l’ordre : la clé privée, le certificat, le certificat de l’autorité de certification.
– Au niveau du backend, il faut mettre l’ip et le port où se trouve le varnish.
– Définissez plusieurs blocs Backend pour load-balancer les requêtes sur 2 varnishs.
Au niveau du varnish, ajoutez dans le vcl_recv :
if (!req.http.x-forwarded-proto) {
et
}
autour du bloc qui ajoute le X-Forwarded-For car il est déjà ajouté par pound.
Ajoutez ensuite dans le vcl_hash :
if (req.http.x-forwarded-proto) { hash_data(req.http.x-forwarded-proto); }
Ensuite au niveau du code il faut que les liens et appels à d’autres objets (images,css,js,…) se fassent en https.
Souvent les codes php le font déjà en détectant le protocole grâce à
$_SERVER['HTTPS'] ou $_SERVER['SERVER_PORT']
Il faut utiliser le
$_SERVER['HTTP_X_FORWARDED_PROTO'])
Ou ajouter sur le vhost apache2 :
SetEnvIf X-Forwarded-Proto https HTTPS on
P.S. (20/01/2013) : La version 2.5 de pound fournie par les dépôts squeeze semble avoir une fuite mémoire. Préférez la version 2.6 qu’il faudra compiler http://www.apsis.ch/pound/Pound-2.6.tgz