Nginx 为什么要在端口80上运行Varnish以进行仅HTTPS设置?

Nginx 为什么要在端口80上运行Varnish以进行仅HTTPS设置?,nginx,https,varnish,Nginx,Https,Varnish,在我所看到的几乎所有使用nginx和SSL支持设置Varnish的示例中,设置都是Varnish在端口80上运行,nginx在端口443上用于SSL终止,nginx在另一个端口上运行,执行与后端通信的实际工作 鉴于大多数网站现在将端口80重定向到443,在端口80上运行Varnish有什么好处 为什么不让nginx在端口80上运行,对HTTPS版本执行301操作,在端口443上运行nginx执行SSL终止并代理到Varnish,Varnish正在另一个端口上运行,而nginx在另一个端口上再次运

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

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

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

HTTP:nginx[80](301)

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

我真的看不出仅仅为了重定向而在房子前面的80号端口涂清漆有什么好处。除非重定向和向URL添加不必要的端口号时出现问题?也许添加3个nginx服务器块就是在设置中添加“更多”的工作,但是必须将Varnish配置为重定向端口80,除非它是内部的,这看起来像是“更多”的工作


另外一个问题:当nginx已经在使用时,为什么在大多数设置中都添加了Apache,而visa也在使用呢?它们都可以处理SSL终止和代理。

我认为我们可以简化一点: HTTPS:nginx[443]Varnish[6081]后端

让Varnish进行缓存并避免额外的Nginx层

更简化: 挂接装置[443]清漆[6081]后端

悬挂装置:

我同意“为什么不”:

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
HTTP:Varnish[80](条件301,使用VCL)
HTTPS:nginx[443]Varnish[80]nginx[8080]后端
答案是:

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

我现在找不到这篇文章,但我确实读到了一个“诀窍”,那就是将端口80上的nginx绑定到外部IP,并将Varnish绑定到端口80本地主机,以避免在重定向期间将非端口80端口号附加到URL上的问题。这仍然有效吗?在上面的评论中添加消息来源:是的,我认为这是有效的。您可以让应用程序在不同接口的同一端口上侦听(本例中为localhost和external),因此这有助于避免重定向问题。尽管用其他方法很容易解决。我认为这比(在同一个端口上侦听)更好,因为您必须在NGINX或Varnish中指定外部IP(接口)(取决于您希望在前面的位置),并且在config中硬编码IP并不完全是一件好事……后端之前的附加NGINX需要与PHP-FPM接口