【问题标题】:Varnish to be used for https用于 https 的清漆
【发布时间】:2016-02-02 04:34:53
【问题描述】:

情况是这样的。我的客户端通过安全网络 (https) 与多个后端通信。现在,我想建立一个反向代理,主要用于负载平衡(基于标头数据或 cookie)和一些缓存。所以,我认为清漆可能有用。

但是,varnish 不支持 ssl 连接。正如我在很多地方读到的,引用"Varnish does not support SSL termination natively"。但是,我想要每个连接,即。 client-varnish 和 varnish-backend 通过 https。我不能在整个网络的任何地方都有纯文本数据(有限制),所以没有其他东西可以用作 SSL-Terminator(或者可以是?)。

所以,这里有问题:

  • 首先,这是什么意思(如果有人可以简单地解释)“Varnish 本身不支持 SSL 终止”。
  • 其次,这个场景使用 varnish 实现好吗?
  • 最后,如果 varnish 不是一个好的竞争者,我是否应该切换到其他反向代理。如果是,那么哪个适合该场景? (HA、Nginx 等)

【问题讨论】:

    标签: nginx https reverse-proxy varnish haproxy


    【解决方案1】:

    这是什么意思(如果有人可以简单地解释)“Varnish 本身不支持 SSL 终止”

    这意味着 Varnish 没有对 SSL 的内置支持。除非 SSL 由单独的软件处理,否则它不能在带有 SSL 的路径中运行。

    这是 Varnish 的作者在架构上做出的决定,他早在 2011 年就讨论了将 SSL 集成到 Varnish 中的想法。

    他基于许多因素,其中最重要的一点是希望这样做正确,同时观察到 SSL 的事实上的标准库是 openssl,这是一个超过 300,000 行代码的错综复杂的收集,他对代码库既没有信心,也对有利的成本/收益比的可能性没有信心。

    他当时的结论,一句话,“不”。

    这不是我小时候梦想做的事情之一,如果我现在做梦,我会称之为噩梦。

    https://www.varnish-cache.org/docs/trunk/phk/ssl.html

    他在 2015 年重新审视了这个概念。

    他的结论还是“不”。

    代码很难,加密代码是双加难,如果不是双平方难的话,世界真的不需要另一段在密码学方面做得半途而废的代码。

    ...

    当我看到像 Willy Tarreau 的 HAProxy 这样的东西时,我很难看到任何重大的改进机会。

    不,Varnish 仍然不会添加 SSL/TLS 支持。

    在 Varnish 4.1 中,我们增加了对 Willys PROXY 协议的支持,这使得从 SSL 终止代理(例如 HAProxy)到 Varnish 的额外细节通信成为可能。

    https://www.varnish-cache.org/docs/trunk/phk/ssl_again.html

    此增强功能可以简化将 varnish 集成到具有加密要求的环境中,因为它提供了另一种机制,用于在卸载的 SSL 设置中保留原始浏览器的身份。

    这个场景使用 varnish 来实现好吗?

    如果您需要 Varnish,请使用它,注意 SSL 必须单独处理。但是请注意,这并不一定意味着未加密的流量必须遍历您的网络……尽管这确实会导致设置更加复杂和 CPU 消耗量大。

    没有其他东西可以用作 SSL-Terminator(或者可以是?)

    SSL 可以在 Varnish 的前端卸载,并在 Varnish 的后端重新建立,都在运行 Varnish 的同一台机器上,但通过单独的进程,使用 HAProxy 或 stunnel或 nginx 或其他解决方案,在 Varnish 前后。任何明确的流量都在一台主机的范围内运行,因此如果主机本身是安全的,则可以说不是漏洞点,因为它永远不会离开机器。

    如果 varnish 不是一个好的竞争者,我应该切换到其他反向代理

    这完全取决于您在堆栈中想要和需要什么、它对您的成本/收益、您的专业水平、资源的可用性以及其他因素。每个选项都有自己的一组功能和限制,在同一个堆栈中使用多个选项当然不是闻所未闻的。

    【讨论】:

    • 嗨,这一个非常好的解释。这不仅仅是安全性,还有审计/认证限制。因此,即使纯文本在同一台机器上,系统管理员也可以看到它,即使这样也是不可接受的。因此,无论我将使用什么来从内部路由流量,我也需要它来路由 SSL 流量。所以,我现在可能会使用HAProxy 进行负载分配。
    • 好吧,换个说法,你知道是否可以使用 HAProxy 根据 Http(s) 标头/参数和/或 cookie 分配负载?
    • @vish4071 是的,只要 HAProxy 终止 SSL 连接,HAProxy 就可以检查负载并在 HTTPS 上做出与 HTTP 相同的路由决策。它可以重新建立到后端的 SSL,因此未加密的数据仅在 HAProxy 进程中,这与 Varnish 发生的情况不同,但实际上与 Web 服务器本身内部发生的情况没有什么不同——加密数据必须被网络服务器解密或应用程序无法处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多