使用Varnish与SaaS HTTPS后端服务器



我想配置Varnish使用HTTPS(!)服务作为后端服务。这里的关键是连接到后端服务的SSL部分!我对这些HTTPS后端服务的控制有限(将它们视为托管在云中的SaaS服务)。

设置是这样的:User-Agent -> AWS ELB作为SSL终止器-> AWS中的清漆->云中的HTTPS SaaS服务

原因如下:-我想用Varnish ESI用我自己的自定义页眉装饰SaaS服务UI &页脚。-通过让所有请求都通过Varnish,我可以获得关于SaaS服务的额外分析数据,否则我无法获得这些数据-我可以使用Varnish重写SaaS服务的URL,有效地对最终用户隐藏SaaS服务的URL

我能够使用AWS ELB作为用户代理的SSL终止器,但是我如何让Varnish作为原始服务器访问HTTPS SaaS服务?

背景:我在一个门户网站工作,我们将向客户提供许多不同的服务(所有服务都有自己现有的UI,即它们没有无头RESP api !)。将所有这些服务结合在一起的主要东西是一个共同的页眉和页脚(页眉显示顶级导航和登录/用户名注销)。

我们拥有的服务类型如下,都有自己的UI层,我们不想复制:-白色标签的第三方SaaS服务(例如Zendesk或Salesforce),托管在云端-内部开发JavaEE/Spring服务,托管在AWS上-我们公司其他团队开发的服务,但它们托管在我们自己的数据中心

添加ESI包含对于每个服务都很好,但是我不想为每个服务重复多次重新实现页眉/页脚的工作。

我最近遇到了一个类似的需求,需要使用https访问所需的后端。

当然,有很多反对意见可以提出,为什么这是错误的做法…但在这种情况下,我受到以下事实的限制:我需要将数据加密到后端,地理距离很远,而且由于各种系统的所有权和控制权,VPN是不可能的。

从我有限的测试来看,这是一个解决方法,似乎有可能使用stunnel4解决这个问题。

配置中的示例行:

client  = yes
[mysslconnect]
accept  = 8888
connect = dest.in.ation.host.or.ip:443

现在,stunnel4正在侦听本地(varnish)机器上的端口8888,并且每次传入连接到达时,它都会建立到远程系统上端口443的ssl连接。

连接到本地服务器上的127.0.0.1端口8888允许我向目标后端服务器讲明文HTTP,这发生在一个SSL连接上,实际上是由stunnel4管理的…因此,将varnish配置为使用127.0.0.1:8888作为后端是我想要的,因为varnish认为它正在与普通的http服务器交谈,不知道stunnel4代表它做了什么。

我不能保证它的可扩展性或可靠性,因为我只是没有让它工作,但到目前为止,它似乎是一个可行的解决方案,在清漆的限制。

不支持使用Varnish访问HTTPS后端。Varnish向后端发送HTTP。

如果你想访问HTTPS后端内容,你必须通过另一个守护进程/代理来添加/删除HTTPS。有相当多的选择,其中之一是stunnel,这是经过试验和测试的。

从你所描述的(重写内容)来看,我想说你几乎用错了锤子。清漆可能不是最好的工具,你有没有考虑过用mod_rewrite/mod_substitute把东西粘在一起?

这是由Varnish Cache Plus支持的,它不是免费的。

backend default {
    .host = "backend.example.com";
    .port = "443";
    .ssl = 1;               # Turn on SSL support
    .ssl_sni = 1;           # Use SNI extension  (default: 1)
    .ssl_verify_peer = 1;   # Verify the peer's certificate chain (default: 1)
    .ssl_verify_host = 1;   # Verify the host name in the peer's certificate (default: 0)
}

相关内容

最新更新