2014-02-16 108 views
0

我正在使用Elastic Beanstalk,并且在配置SSL时遇到了一些麻烦。弹性负载均衡器和https

我有一个由负载平衡器和单个EC2实例组成的环境。负载平衡器在端口443和80上具有侦听器。环境中的EC2实例在端口80上运行tomcat。我在负载平衡器中有一个证书,并且我能够通过端口443和80访问站点,一切都是工作得很好。

问题是,我希望所有请求都被重定向到端口443,即使是端口80上的端口也是如此。我已经搜索了高和低的方法来执行此操作,而无需更改我的安全配置。这是一个使用Spring安全性和MVC在Tomcat 7上运行的小型webapp。我试着用

<sec:intercept-url pattern="/**" requires-channel="https"/> 

但我有几页是没有过滤器链这样

<sec:http pattern="/login.html" security="none" /> 

这似乎喜欢的事,可以解决在负载平衡器的一部分,但我没有太多的经验设置SSL。任何帮助表示赞赏。

回答

2

您的ELB接受443和80上的连接,但它会终止SSL并仅在80上联系您的代码。SSL基本上是从浏览器到ELB。 ELB到Beanstalk上的后端代码始终为80.

因此,任何期望基于传入协议匹配的规则都不起作用。相反,您应该使用此标题“X-Forwarded-Proto:”(将由ELB设置),然后执行转发规则。

+0

我会尝试创建一个使用该标头的过滤器。我想我希望有一种方法可以让ELB在请求到达我的代码之前执行重定向。 – user3316434

+0

过滤器正常工作,通过检查此标题,我可以重定向到https以获取必要的页面。我是一个新用户,不能回答我自己的问题,但我会在我能够时发布一些代码。谢谢您的帮助。 – user3316434

+0

如果ELB具有这样的功能,那很好,但是他们没有。我们需要按照我在应用程序代码中建议的方式来完成。很好,你能够做到! –