前言
时至 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://bbs.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
可惜看不懂
这是找到的一篇很不错的文章。看完后有几个问题,还请作者指教。
1、架构是hitch—-varnish 5—-nginx?
2、hitch中启用了alpn,那是否你的varnish 5是开启了http/2的?
3、后端使用的nginx是否启用了http/2呢?还是从varnish到nginx走的是http 1.1
1.是这样的架构,的确有点小烦
2.
write-proxy-v2 = on
是声明开启 h2,varnish 5本身还不支持 https,依然也不支持htpp/23.仅 Hitch 这一层开了 HTTPS
HTTPS 只在443端口开启,所有非443端口的反代都不需要https
不知博主是否方便发下完整的配置呢?就是hitch varnish5 以及后端nginx的主要配置?
另外,我目前的配置让hitch启用alpn,varnish5启用proxy_protocol协议,并且在varnish的backend里增加.proxy_header=1,让nginx开启http2,这样是完全可以让网站支持h2的,但是此时varnish并不会做任何缓存操作,从对你的网页分析,感觉X-Cache和x-store这两个头部都是nginx响应的,并不是varnish响应的吧
Varnish的缓存规则需要使用varnish设置
博主方便把主要部分配置分享下吗?
我记得我有单独写过一篇varnish的教程
刚刚设置好了hitch,提示一下上面的两处错误:
/lib/systemd/system/varnish.service
[code]
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'
[/code]
/etc/default/varnish
[code]
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,512m \
-a '[::1]:6086,PROXY'"
[/code]
已经纠正,多谢提醒