【发布时间】:2015-09-02 17:36:53
【问题描述】:
我已成功让我的应用与负载均衡器一起工作。作为一项削减成本的措施,我将我的应用程序移至 Amazon AWS Elastic Beanstalk 上的单个实例。
我能够使用 singlessl.config 创建一个 .ebextensions 文件,并通过手动转到 https://www.example.com/login 正确让我的 SSL 证书在 WAR 文件中工作
所以我知道我的 war 文件/ssl 可以在单个实例上工作。
我没能去工作的是让 spring security 工作。
无论我尝试何种配置变体,浏览器总是因“错误太多重定向”而死机。当我只输入没有 https (http://example.com) 的应用程序主页时,就会发生这种情况
我认为重定向是从 http 到 https 并返回,或者 app/apache/tomcat 中的某些内容在不同端口之间返回。
spring security、apache 和/或 tomcat 之间存在一些问题,但我不确定是什么。
此时,如果整个网站都是安全的,我会采用它而不是安全/非安全页面。
我的 grails spring 安全配置(我尝试的最后一个变体,我尝试了大约 10 个)是:
grails.serverURL = "https://www.example.com"
grails.plugins.springsecurity.portMapper.httpPort = 80
grails.plugins.springsecurity.portMapper.httpsPort = 443
grails.plugins.springsecurity.auth.forceHttps = true
grails.plugin.springsecurity.secureChannel.definition = [
'/**': 'REQUIRES_SECURE_CHANNEL'
我必须在 Tomcat 或 Apache 中做些什么才能让它在 Elastic Beanstalk 中工作?
【问题讨论】:
-
我知道您只有 1 个实例,但您的实例是否位于 ELB 后面?如果负载平衡器有 SSL 终止,我遇到了 HTTP 重定向的棘手情况,所有调用都通过 HTTP 到达网络服务器,这会导致重定向循环。 (我必须检查 X_Forwarded_Proto 标头而不是传入端口。)
-
我正在尝试移除负载均衡器,这样我就不必支付 2 倍的费用。负载均衡器一切正常。当我转到一个实例时,一切都崩溃了。 X_Forwarded_Proto 不适用于单个实例。
-
你显然在 Grails 层中有一个重定向。你有什么关于tomcat/beanstalk级别的吗?能否确认单实例前面没有ELB?
-
我删除ELB后的应用程序面植,所以我知道我成功删除了它。那时我必须创建一个 .ebextensions 文件才能让 SSL 在单个实例中工作。我可以直接去example.com。我不能做的是转到example.com 并将其重定向到example.com。这就是浏览器中的 ERR_TOO_MANY_REDIRECTS 发生的时候。 AWS上EBS自带的tomcat/apache默认配置我还没碰过。
标签: grails amazon-web-services spring-security amazon-elastic-beanstalk