首页 > 解决方案 > 为什么要在端口 80 上运行 Varnish 以进行仅 HTTPS 设置?

问题描述

在我看到的几乎每个使用 nginx 和 SSL 支持设置 Varnish 的示例中,设置是 Varnish 在端口 80 上运行,nginx 在端口 443 上用于 SSL 终止,而 nginx 在另一个端口上运行,执行与后端通信的实际工作。

鉴于大多数网站现在将端口 80 重定向到 443,让 Varnish 在端口 80 上运行有什么好处?

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

HTTP: nginx [80] (301)

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

我真的看不出将 Varnish 放在前面的 80 端口上只是为了进行重定向。除非,重定向和向 URL 添加不必要的端口号存在一些问题?也许添加 3 个 nginx 服务器块会为设置添加“更多”工作,但随后必须配置 Varnish 以重定向端口 80,除非它是内部的,否则似乎“更多”工作。

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

标签: nginxhttpsvarnish

解决方案


我同意“为什么不”:

HTTP: nginx [80] (301)

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

至于为什么:

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

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

答案是:

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

推荐阅读