我的应用程序应该使用普通HTTP还是HTTPS + HTTP2,如果它在nginx后面?

我有一个本地支持HTTPS和HTTP / 2的Web服务。 它被nginx反向代理。

在nginx和应用程序上启用SSL和HTTP / 2,仅在nginx上进行权衡是什么?

如果服务器之间的networking不可信,则Web服务器和后端服务器之间的HTTPS可以提高安全性。 这可能是公共云或共享数据中心的最佳做法,但如果服务器位于同一虚拟机或可信networking上,则可能是不必要的开销。

HTTP显然比encryption连接的开销less。 通过HTTPS的HTTPS和HTTP2具有更高的连接build立成本,但确实有重用连接的机制。 这意味着您不必总是等待连接build立,但是存在encryption的开销。

对于HTTP2,协议比HTTPS更有效率,因此可以提高性能或减less资源使用,但我在这里进行推测。 我一直在寻找有关我之前阅读的http2协议的信息,但是无法立即find它。

支持HTTP2到客户端的CloudFlare似乎并不使用HTTP2来源服务器。 我的Nginx服务器通过HTTPS支持http / 2,但CloudFlare使用的是HTTPS 1.1。

两者都有优点和缺点。

大的专业是,你会增加安全性,因为Nginx和应用程序之间的stream量不会被嗅探。 但是,如果应用程序和nginx托pipe在同一台服务器上,这是没有意义的。 即使应用程序在私人networking中,也不会破坏这两个连接。 事实上,如果在前者和应用程序之间存在另一个HTTPS终止符时,gninx会失去意义。 在这种情况下,我会直接提供对应用程序的公共访问。

另一方面,处理2个encryption连接使用双重计算资源而不仅仅是一个。 只有当应用程序托pipe在具有公共IP的平衡服务器上时才有意义。 在这种情况下,我会密码两个连接,虽然我会使用HAProxy而不是nginx。 虽然这不是一个最佳的也不安全的devise,我不会推荐它。

我的方法是将应用程序部署到专用networking中的所有服务器上(这称为autoscalling [1])。然后,我将HAProxy作为HTTPS终结器和平衡器用于应用程序服务器[2]。

[1] https://www.digitalocean.com/community/tutorials/how-to-implement-ssl-termination -with-haproxy-on-Ubuntu-14-04 )