我一直在为几个网站使用 Varnish Cache。但是,我需要有关实施 HTTPS 的建议。我对 Varnish Cache 的替代品持开放态度。Varnish 的配置相对复杂,所以也许一个不太先进的替代方案更适合我的网站。
Cloudflare 看起来是一个可行的选择,但据我所见,需要一个每月 200 美元起的商业计划。我可能弄错了。
有什么建议吗?
我一直在为几个网站使用 Varnish Cache。但是,我需要有关实施 HTTPS 的建议。我对 Varnish Cache 的替代品持开放态度。Varnish 的配置相对复杂,所以也许一个不太先进的替代方案更适合我的网站。
Cloudflare 看起来是一个可行的选择,但据我所见,需要一个每月 200 美元起的商业计划。我可能弄错了。
有什么建议吗?
在 Varnish 上使用 HTTPS 并不难。尽管 Varnish 本身并不提供 TLS,但它有助于 TLS 终止。
2015 年,Varnish 发布了Hitch,这是一个非常强大的 TLS 代理,可以处理终止 TLS 并将未加密的 HTTP 流量转发到 Varnish。
安装挂钩
您可以从 Hitch 网站下载源代码并在我们的服务器上进行编译。如果您想使用软件包安装 Hitch,您可以在Debian 或 Ubuntu上运行以下命令:
配置挂钩
安装 Hitch 后,打开
/etc/hitch/hitch.conf
并确保使用以下配置:重新配置清漆
您的 Varnish 运行时配置可能包含以下监听信息:
这意味着 Varnish 正在侦听端口 80 上的连接。为了确保 HTTPS 正常工作,我们将添加另一个侦听端口,但具有特定配置:
您会注意到端口
8843
现在也分配给了 Varnish。它不用于标准 HTTP,而是用于使用PROXY 协议的 HTTP 。Hitch 中还启用了 PROXY 协议支持。这样可以确保将原始客户端 IP 地址传递给 Varnish,而不管它必须经过多少额外的跃点。
X-Forwarded-For
Varnish会自动将原始客户端 IP 地址存储在标头中。端口处理的流量类型是
8443
源自 Hitch 的 HTTP 流量,实际上是终止的 HTTPS 流量。识别 HTTPS 请求
Hitch 是一个 TLS 代理,它不理解 HTTP。这意味着它不能设置常规
X-Forwarded-Proto
标头来指示终止了哪种流量。幸运的是,我们可以跟踪使用了哪个端口。下面的 VCL 代码检测 HTTP/HTTPS 请求并分配正确的
X-Forwarded-Proto
标头。基于协议的缓存变体
缓存存储 HTTP 响应,而不是 HTTP 请求。因此,当一个对象存储在缓存中时,Varnish 不知道它是来自 HTTP 还是 HTTPS URL。如果我们在没有额外措施的情况下开始缓存它们,如果 Varnish 开始缓存对象的 HTTP 版本,您最终可能会陷入无限重定向循环。
为了避免这种情况,Varnish 需要每个协议都有一个缓存变化。您可以通过在后端应用程序中返回以下HTTP 响应标头轻松地指示 Varnish 这样做:
如果由于某种原因这是不可能的,您还可以
vcl_hash
在您的 VCL 代码中扩展逻辑。在这种情况下,请添加以下代码段: