前言

时至 2017年5月 Varnish-Cache 对 HTTPS和h2 的支持都是不可生产的,不过好消息是预计在 2017年秋季推出可以在生产环节运行 HTTPS和h2 的 Varnish-Cache 6。

不过在正式推出之前,我们可以通过 Nginx 再多一次代理来实现 h2 支持。但是如果我后端是 Apache Httpd,不想再安装一个 Nginx,那么这次我就介绍一个另一个代理工具 —— Hitch 来实现 h2。

介绍

Hitch 是 Varnish-Cache 的开发公司 Varnish Software 开发的基于 libev 的高性能 SSL/TLS 开源代理软件。

主要特性:

  • 支持 NPN 或 ALPN 扩展实现 HTTP/2
  • 支持 TLS 1.0, TLS 1.1 和 TLS 1.2
  • SNI, 支持泛域名证书和非泛域名证书
  • 自动 OCSP stapling 支持
  • 支持PROXY协议将客户端IP /端口信号发送给后端
  • 大规模安全支持,高达 15000 个侦听套接字和 50 万证书
  • 支持平滑重新加载证书和监听端点

    教程

    目前只有 Debian (8)Jessie-Backports 是支持 Hitch1.4 和 OpenSSL 1.0.2 的长期支持的发行版,其他发行版要么 Hitch 太旧不支持 h2 特性,要么 OpenSSL 太旧不支持 ALPN 协议实现 h2,要么就不是 LTS 版本。

所以教程以 Debian 8 为例。SSL 证书通过 ACMETool 安装 Let’s Encrypt 证书。

升级系统

一、在 /etc/apt/source.list 中根据原来的镜像源添加jessie-backports,如果已经存在就不用添加了:

deb http://mirrors.digitalocean.com/debian jessie-backports main

二、 升级软件

apt-get update
apt-get -t jessie-backports upgrade -y

三、安装 OpenSSL 1.0.2

apt-get -t jessie-backports install openssl -y

安装 Varnish-Cache

Varnish-Cache 的安装请查看:

https://www.mf8.biz/varnish-wordpress-make-fast-1/

设置 验证端口

创建 /etc/varnish/acmetool.vcl 文件


backend acmetool {
   .host = "127.0.0.1";
   .port = "402";
}

sub vcl_recv {

    if (req.url ~ "^/.well-known/acme-challenge/") {
        set req.backend_hint = acmetool;
return(pass);
    }
}

/etc/varnish/default.vcl 末尾加入

include "/etc/varnish/acmetool.vcl";

添加代理端口

修改 /lib/systemd/system/varnish.serviceExecStart 末端加入 -a '[::1]:6086,PROXY'

例如:

ExecStart=/usr/sbin/varnishd -a :6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m -a '[::1]:6086,PROXY'

修改 /etc/default/varnishDAEMON_OPTS= 中添加 -a '[::1]:6086,PROXY'

例如:

DAEMON_OPTS="-a :6081 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m" \
             -a '[::1]:6086,PROXY'

输入以下命令重启 Varnish-Cache

systemctl daemon-reload
service varnish restart

Acmetool

一、安装 Acmetool,同样需要通过 Jessie-Backports:

apt-get -t jessie-backports install acmetool

二、设置 Acmetool

acmetool quickstart

选择

1) Let's Encrypt (Live) - I want live certificates

···

2) PROXY - I'll proxy challenge requests to an HTTP server

···

然后就是输入邮箱和一路 y 了

三、生成 dhparams 文件

openssl dhparam -out /var/lib/acme/conf/dhparams 2048

四、申请证书

acmetool want mf8.biz www.mf8.biz

将我的域名替换成你的就行。

设置 Hitch

修改 /etc/hitch/hitch.conf 文件

frontend = "[*]:443"
ciphers  = "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"

backend        = "[::1]:6086"
write-proxy-v2 = on
alpn-protos = "h2,http/1.1"
tls-protos = TLSv1.1 TLSv1.2

pem-file = "/var/lib/acme/live/www.mf8.biz/haproxy"

将最后一行中 www.mf8.biz 替换成你的就行。

重启 hitch 就大功告成了!

service hitch start