前言
时至 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.service
在 ExecStart
末端加入 -a '[::1]:6086,PROXY'
例如:
ExecStart=/usr/sbin/varnishd -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,512m -a '[::1]:6086,PROXY'
修改 /etc/default/varnish
在 DAEMON_OPTS=
中添加 -a '[::1]:6086,PROXY'
例如:
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,512m \
-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
评论已关闭