Varnish no realiza las terminaciones SSL por lo que hay que usar un proxy intermedio para realizarlas. En este post mostraré una configuración para tener una terminación con Haproxy y Varnish.
Ambos utilizan el protocolo PROXY. Para que Varnish lo utilice, hay que configurar la opción -a :6083,PROXY. La ejecución del servicio Varnish puede quedar así:
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -a :6083,PROXY -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,4096m -l 100m,10m -t 60 -p feature=_++esi_disable_xml_check -p connect_timeout=5 -p first_byte_timeout=10 -p between_bytes_timeout=2
En el VLC añadir estas líneas:
sub vcl_recv { set req.http.x-clientip = client.ip; set req.http.x-serverip = server.ip; set req.http.x-localip = local.ip; set req.http.x-remoteip = remote.ip; ... }
Creamos un certificado autofirmado para la terminación:
# mkdir /etc/ssl/chop.io # openssl genrsa -out /etc/ssl/chop.io/chop.io.key 1024 # openssl req -new -key /etc/ssl/chop.io/chop.io.key \ -out /etc/ssl/chop.io/chop.io.csr # openssl x509 -req -days 365 -in /etc/ssl/chop.io/chop.io.csr \ -signkey /etc/ssl/chop.io/chop.io.key \ -out /etc/ssl/chop.io/chop.io.crt # cat /etc/ssl/chop.io/chop.io.crt /etc/ssl/chop.io/chop.io.key \ | tee /etc/ssl/chop.io/chop.io.pem
En el archivo de configuración de Haproxy hay que añadir al final algo como esto:
frontend http-in-proxy bind *:80 bind *:443 ssl crt /etc/ssl/chop.io/chop.io.pem redirect scheme https if !{ ssl_fc } default_backend servers-proxy backend servers-proxy server webapp1 192.168.122.20:6083 send-proxy-v2 server webapp2 192.168.122.20:6083 send-proxy-v2
Si ya configuramos el VCL de Varnish, con esto ya deberíamos tener hecha la terminación.