有人成功在Amazon ELB背后使用SPDY吗?

13

我们一直使用带有spdy模块的nginx并且尽管规范仅为第二版,但对它的性能非常满意。

然而,我们现在需要水平扩展,并将EC2实例放置在Elastic Load Balancer后面。

由于ELB不支持NPN协议,因此我们将监听器设置为以下内容:

SSL 443 -> SSL 443

我们还启用了新的代理协议,如此处所述:

http://docs.aws.amazon.com/zh_cn/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html

这样的配置完全正常工作。 我们的应用程序已成功地负载平衡到我们的实例之间。

然而,当运行http://spdycheck.org/时,它报告SPDY未启用。 但是,如果我将spdycheck指向单个实例的弹性IP,则会正确地报告SPDY已启用。

非常感谢您的任何帮助。

2个回答

8

进行SSL时,SSL不会将整个TCP数据包发送到您的Web服务器。AWS使用证书解密数据包并重新加密它。您的后端只接收修改后的数据包。

可行的选择是将协议更改为TCP,但您需要nginx代理补丁来处理HTTP头或更好地工作。

我也遇到了同样的问题,并正在等待AWS启用ELB上的NPN协商或者nginx在其模块中添加accept-proxy补丁。


我有同样的问题,这两个问题有任何更新吗? - Manjit Kumar

6
我们昨晚在https://www.ritani.com发布了它。您需要一个支持spdy和proxy_protocol的nginx版本,我们使用的是1.6.2。
通过AWS CLI将proxy_protocol添加并附加到ELB。 http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html#enable-proxy-protocol-cli 通过该ELB的AWS Web UI,删除任何443监听器。添加一个新的TCP 443监听器-> TCP 443。
在nginx配置服务器块中: listen 443 ssl spdy proxy_protocol; add_header Alternate-Protocol 443:npn-spdy/3; 所有标准ssl指令... 为了使ocsp stapling起作用,我不得不使用三个证书。连接my.crt和my.intermediate.crt的标准方法不起作用。我必须按以下方式分开它们。 ssl_certificate /etc/nginx/ssl/my.crt; ssl_certificate_key /etc/nginx/ssl/my.private.key; ssl_trusted_certificate /etc/nginx/ssl/my.intermediate.crt; 最后,将所有实例中的$remote_addr换成$proxy_protocol_addr。$remote_addr现在是elb,而$proxy_protocol_addr是远程客户端的IP。

Sapel,你现在有ELB -> NGINX -> 支持SLL和SPDY的应用程序了吗?如果是这样,你能指定SSL终止的位置吗? - John Mark Mitchell
SSL已在NGINX中终止,不再在负载均衡器中。 - sapel
我们能不能直接在应用服务器上终止呢?这样就可以是ELB -> App1或ELB -> App2。你在应用服务器上运行nginx吗? - greg_diesel
如果你的应用程序服务器支持SPDY和proxy_protocol,我想你可以这样做。我们在它们前面运行nginx,并将特定路径代理传递给应用程序服务器。 - sapel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接