2014-02-27 94 views
2

由于我们不会改变原因,我们的应用程序需要处理SSL连接,而不是ELB。使用代理协议的目标是通过SSL连接获取客户端的IP地址。Elastic Load Balancing上的代理协议非终止SSL连接

http://aws.typepad.com/aws/2013/07/elastic-load-balancing-adds-support-for-proxy-protocol.html?ref_=9表示“或者,你可以使用它,如果你是发送HTTPS请求,并且不希望终止对负载平衡器的SSL连接。欲了解更多信息,请访问Elastic Load Balancing Guide”。

不幸的是,它看起来与此链接的指南实际上没有详细说明这一点,并且当按照上述配置时,代理协议的基本文档(http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html)在我们的环境中失败。

有没有人有此步骤或链接?

回答

2

在您的服务器协商SSL之前,代理协议(版本1)在连接开始时将单行插入数据流。您不会通过SSL连接获取此信息;您在SSL握手之前获取信息。您的服务器必须实现此功能,并进行专门的配置,以便它可以接受和理解它。对于IPv4连接,它看起来像这样:

PROXY TCP4 source-ip dest-ip source-port dest-port\r\n 

该协议的标准是在这里:

http://haproxy.1wt.eu/download/1.5/doc/proxy-protocol.txt

在这里ELB文档附加信息:

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


关于Apache支持吨,至少在AWS宣布为代理协议支持的时间...

既不阿帕奇也不Nginx的目前支持的代理协议报头由ELB

http://aws.typepad.com/aws/2013/07/elastic-load-balancing-adds-support-for-proxy-protocol.html?ref_=9插入

这是受到改变,当然,但我没有成功的谷歌任何Apache支持的代理协议。当然,由于Apache是​​开源的,你大概可以在那里破解它,尽管我不熟悉Apache源代码。

由于意识到你不想改变现在正在做的事情,我仍然会建议,根据你不希望改变的动机,可能仍然有一个相对简单的解决方案。这是一个变化,但不涉及ELB的SSL。如何在ELB后面运行HAProxy来终止Apache前面的SSL?由于HAProxy 1.5可以终止SSL,并且appears to be able to将代理协议字符串从ELB转换为X-Forwarded-For标题,并生成X-SSL标题,以提供有关客户端SSL证书的应用程序信息(也许这是您在应用程序服务器上终止SSL的动机,而不是在ELB上?)...所以这可能是一种选择。否则,除非Apache在未来实现支持,否则我没有任何建议,或者我们可以找到一些文档来表明它们已经拥有。

+0

谢谢你的回答。我想我真正的问题是,如果有可能修改Apache来容纳额外的字符串,如果是的话如何? – conrad10781

+0

@ conrad10781我不确定,但我已经在答案中增加了一些额外的信息,希望它至少有用。 –

+1

仅供参考,nginx现在支持代理协议:http://nginx.org/en/docs/http/ngx_http_realip_module.html –

0

为了跟进Michael - sqlbot的回答讨论AWS support for proxy protocol on EC2 instances behind elastic load balancers,有两个可用的Apache模块实现代理协议:mod_myfixipmod_proxy_protocol。两者都能够纠正记录用户IP地址的问题,而不是弹性负载均衡器的IP。

我已经试过这两个,并得到他们的工作AWS并同意HAProxy的的recommendation使用mod_myfixip(mod_proxy_protocol休息的httpd没有配置负载平衡器时发送代理协议头,而mod_myfixip优雅地失败)。

相关问题