为什么 运行 Varnish 在端口 80 上仅用于 HTTPS 设置?

Why run Varnish on port 80 for an HTTPS only setup?

在几乎所有我见过的设置 Varnish 支持 nginx 和 SSL 的例子中,设置是 Varnish 运行 在端口 80 上,nginx 在端口 443 上用于 SSL 终止和 nginx 运行在另一个端口上执行与后端通信的实际工作。

鉴于大多数网站现在将端口 80 重定向到 443,在端口 80 上安装 Varnish 运行 有什么优势?

为什么不在端口 80 上安装 nginx 运行,对 HTTPS 版本执行 301,在端口 443 上安装 nginx 运行,执行 SSL 终止并代理到 Varnish,这是 运行 在不同的端口上,nginx 再次 运行 在另一个端口上做实际工作?

HTTP:nginx [80] (301)

HTTPS:nginx [443] <> Varnish [6081] <> nginx [8080] <> 后端

我真的看不出在前端 80 端口上安装 Varnish 只是为了进行重定向有什么好处。除非,重定向和不需要的端口号添加到 URL 存在一些问题?也许添加 3 个 nginx 服务器块正在为设置添加 "more" 工作,但随后必须配置 Varnish 以重定向端口 80,除非它是内部的,似乎 "more" 工作。

额外的问题:为什么在大多数这些设置中添加了 Apache,而 nginx 已经在使用中,反之亦然?他们都可以处理 SSL 终止和代理。

我想我们可以稍微简化一下: HTTPS:nginx [443] <> 清漆 [6081]<> 后端

让 Varnish 做缓存,避免额外的 Nginx 层。

进一步简化: 挂钩 [443] <> 清漆 [6081]<> 后端

挂钩:https://hitch-tls.org/

我同意“为什么不”:

HTTP: nginx [80] (301)

HTTPS: nginx [443] <> Varnish [6081] <> nginx [8080] <> backend

至于原因:

HTTP: Varnish [80] (conditional 301, using VCL)

HTTPS: nginx [443] <> Varnish [80] <> nginx [8080] <> backend

答案是:

  • 遗留原因。这只是进入“条件 HTTPs”世界的方式(网站可以同时使用 HTTP 和 HTTPs 版本,或者根本没有 HTTPs 版本),这只是几年前的事,在 Google,作为网络垄断者,并不坚持所有网站都有 HTTP,也不担心搜索排名较差。最近相对,LetsEncrypt 允许每个人使用免费证书,而上述Google 的要求使得很多网站都使用这些证书。 websites/tutorials 用于 Varnish 设置,只是没有拾取/调整端口,因为它没有被认为需要调整。
  • 可扩展性。在“单一服务器”设置之外思考。当您决定构建 Varnish-es (CDN) 堆栈时,将“主要”Varnish 保留在端口 80 上更有意义。(Outside/edge Varnish 实例将与主要 Varnish 对话,而不是与主后端交谈,用于“缓存缓存”之类的东西)。 edge<>main 之间的流量不安全,但没有加密性能损失。