![使用 cloudflare 和 SSL terminator 配置 varnish](https://linux22.com/image/785680/%E4%BD%BF%E7%94%A8%20cloudflare%20%E5%92%8C%20SSL%20terminator%20%E9%85%8D%E7%BD%AE%20varnish.png)
我们目前的情况: 当前情况
现在,我们计划在用户和网站之间创建一个缓存服务器。 拟议计划
据我了解,缓存服务器无法处理 HTTPs 数据。因此,我们必须将数据从 https 转换为 http。因此,我们可以使用两个 SSL 终端进行此转换。 带有 SSL 终止的 Varnish
我可以配置用户和 varnish 服务器之间的 SSL。但我不明白如何配置 Varnish 和 Cloudflare 之间的终止以实现 HTTPs 到 HTTP 的转换。
答案1
目前,Varnish 的开源版本 Varnish Cache 不支持 TLS。
您可以使用 Hitch 等 TLS 代理卸载来自客户端的传入 TLS 请求。请参阅https://www.varnish-software.com/developers/tutorials/terminate-tls-varnish-hitch/有关如何安装和配置它的教程。
但是,Varnish 也不支持后端 TLS 连接。这意味着 Varnish 和 Cloudflare 之间的连接也将通过纯 HTTP 进行。
向其他服务器传输协议信息
鉴于一旦 TLS 连接被 TLS 代理终止,所有流量都会通过纯 HTTP 传输,因此需要传输有关初始客户端连接的元数据。
我最初的建议是在链中的所有代理服务器上启用 PROXY 协议。这意味着:
- 在 Varnish 上启用 PROXY 协议监听接口
- 通过 PROXY 协议将流量从 Hitch 发送到 Varnish
- 通过 PROXY 协议将流量从 Varnish 发送到 Cloudflare
这可确保客户端连接信息在所有跳数中都得到考虑。
但为了安全起见,我还会X-Forwarded-Proto
根据 PROXY 信息在 Varnish 中设置标头。请参阅https://www.varnish-software.com/developers/tutorials/terminate-tls-varnish-hitch/#retrieve-tls-information-with-vmod_proxy找到完成此操作的确切 VCL 代码
看https://developers.cloudflare.com/fundamentals/get-started/reference/http-request-headers/#x-forwarded-proto了解 Cloudflare 的看法X-Forwarded-Proto
。
如果您有 Cloudflare 企业计划,您还可以在 Cloudflare 中接收 PROXY 协议请求。请参阅https://developers.cloudflare.com/spectrum/how-to/enable-proxy-protocol/了解更多信息。
只需将该属性添加.proxy_header = 2;
到后端default.vcl
即可启用后端连接的 PROXY 协议。
如果您没有 Cloudflare 企业计划,也许使用X-Forwarded-Proto
是一个可行的方法。
Varnish Enterprise 中的 TLS 支持
如果您希望在 Varnish 中获得端到端 TLS 支持,您可以向 Varnish Software 购买 Varnish Enterprise 产品的订阅。
看https://docs.varnish-software.com/varnish-enterprise/features/backend-ssl/有关 Varnish Enterprise 中后端 TLS 支持的文档。
看https://docs.varnish-software.com/varnish-enterprise/features/core-ssl/用于 Varnish Enterprise 中的核心 TLS 支持。