我有一个Go服务器,目前在AWS上与Kubernetes一起运行。该网站位于一个路由-53和一个ELB管理SSL终端。现在,我希望在我的web服务器中支持HTTP/2,以便将资源推送给客户端,并且我看到HTTP/2要求web服务器使用HTTPS。根据这点,我有几个问题。
我觉得我错过了什么,所以我会感谢你的帮助。谢谢
发布于 2018-07-29 19:16:08
如果后端也不是HTTP2,那么在AWS负载均衡器上部署HTTP2没有好处。从技术上讲,HTTP2不需要HTTPS,但是没有人为HTTP实现HTTP2。HTTP2是一种协议优化(简单观点),它消除了SSL协商中的往返,改进了流水线等。如果负载均衡器通过HTTP与后端通信,则不会有任何改进。由于HTTPS设置期间往返行程的减少,负载均衡器将看到负载的小幅下降。
我建议您将后端服务配置为只使用HTTPS (将客户端重定向到HTTPS)并使用SSL证书。然后配置HTTP2,这并不容易。您可以使用让我们加密SSL,这是非常好的工作。您还可以使用OpenSSL自签名证书(我不建议使用这种证书)。不能使用AWS服务为后端服务创建SSL证书,只能用于AWS托管服务(CloudFront、ALB等)。
您还可以使用第4层(TCP)侦听器设置负载均衡器。这就是我在后端服务器上设置HTTP2时所做的事情。现在,从客户端到后端的整个路径都是使用HTTP2,而没有双SSL加密/解密层。
负载平衡器的一个好特性称为"SSL卸载“。这意味着在负载均衡器上启用SSL,并且只在后端web服务器上启用HTTP。这与HTTP2背道而驰。因此,通过你真正想要完成的事情来思考,然后设计你的服务来实现这些目标。
另一点需要考虑。由于您正在研究HTTP2,同时在您的服务中删除对旧的TLS版本以及不安全的加密和哈希算法的支持。今天应该强制删除TLS 1.0,我建议也删除TLS 1.1。除非您确实需要支持古老的浏览器或自定义的低端硬件,否则TLS 1.2应该是当今的标准。您的日志文件可以告诉您客户端是否正在通过旧协议进行连接。
发布于 2018-07-30 06:46:56
新的ELB支持HTTP/2 (https://aws.amazon.com/blogs/aws/new-aws-application-load-balancer/),但不支持Push属性(https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#listener-configuration):“您不能使用HTTP/2的服务器推送功能”
如果您想使用Push,您可以使用ELB作为四级TCP LoadBalancer,并在您的ELB服务器上启用它。对于HaProxy,仍然可以使用此设置(HTTP/2 behind reverse proxy)来偏移SSL/TLS,但不确定在ELB下是否可能出现类似的情况(可能不会)。这是因为虽然HTTP/2需要来自所有主要浏览器的HTTPS,但它并不是协议本身的要求,因此负载均衡器->服务器可以在HTTP/2上运行,而不需要HTTPS (称为h2c)。
然而,我要说,HTTP/2推送是非常复杂的,要正确阅读这篇由谷歌的杰克·阿奇博尔德撰写的优秀文章:https://jakearchibald.com/2017/h2-push-tougher-than-i-thought/。通常情况下,它在少数情况下是有益的,并且在大多数情况下不会改变,在其他情况下甚至会导致性能下降。说到底,HTTP/2的特性有点令人失望,不过我个人认为还没有对它进行足够的探索,因此可能还会有一些积极的方面。
因此,如果您不想要推送,那么在前端升级到HTTP/2还有什么意义吗?是的,在我看来,正如我在这里回答的那样:HTTP2 with node.js behind nginx proxy。这还表明,从LB到need服务器的后端没有真正的HTTP/2需要,这意味着您可以将它保留为HTTPS卸载面包平衡器。
应该注意的是,有些用例中HTTP/2速度较慢:
https://stackoverflow.com/questions/51583437
复制相似问题