我们一直在使用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报告为已启用。
非常感谢任何帮助。
答案 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。