有没有人设法让SPDY在亚马逊ELB背后工作?

时间:2013-11-14 16:57:11

标签: amazon-web-services nginx load-balancing spdy

我们一直在使用spdy模块编译的nginx已经有一段时间了,尽管只有草案2的规格对其性能非常满意。

然而,我们现在需要横向扩展并将我们的EC2实例放在Elastic Load Balancer之后。

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

SSL 443 - > SSL 443

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

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

使用此配置,一切正常。我们的应用程序在我们的实例中成功地实现了负载平衡。

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:8)

执行SSL - > SSL不会将整个TCP数据包发送到您的Web服务器。 AWS使用证书对数据包进行解密并重新加密。您的后端只接收修改后的数据包。 可行的选择是将协议更改为TCP,但您需要nginx proxy patch用于http标头或更好地工作。

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

答案 1 :(得分: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;

all the standard ssl directives...

要使ocsp装订工作,我必须使用三个证书。连接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。