使用HTTPS设置Elastic Beanstalk应用程序

我在Elastic Beanstalk上有一个工作的应用程序,并希望只通过HTTPS访问它。 因为我希望应用程序自动扩展,所以我需要在负载均衡器级别configurationHTTPS,而不是单个EC2实例级别。 我正在关注如何使用Elastic BeanstalkconfigurationHTTPS。 但是,当我完成教程时,我的域永远不会加载(在http或https上),并在浏览器中获得会话超时。

以下是我到目前为止:

  • Elastic Beanstalk上的工作应用程序。 细节:在预configuration的Glassfish Docker容器上运行的Java EE应用程序。
  • 来自路由53的有效域设置为我的Elastic Beanstalk应用程序。
  • GoDaddy签署的证书,根据我提供的教程链接创build并上传到IAM。

现在,这是我相信问题出现的部分。 本教程的第4步告诉我,我必须更新我的安全组(对于哪个安全组非常模糊)。 所以,我这样更新负载平衡器安全组(删除http请求,只支持https):

来自AWS管理控制台的安全组

然后,在Elastic Beanstalk环境configuration设置中,我将其设置为:

弹性Beanstalk配置

(如果我closures侦听器端口,那么域不会在http或https上加载)。 有了这些设置,如果我去我的域(例如:myapp.com)它将继续加载,直到浏览器显示超时exception。 如果我指定协议(例如: https : //myapp.com ),它将继续加载,直到浏览器显示超时exception。 如果我使用指定的HTTPS协议(例如: https : //myapp.com/login.xhtml )访问特定的链接,则会加载(注意:在尝试应用SSL之前,应用程序工作正常;欢迎页面是使用服务器)。 我究竟做错了什么?

总结了问题:如何configuration我的Elastic Beanstalk应用程序只通过HTTPS工作?

期望的结果:用户在他们的地址栏中键入应用程序域名(例如:myapp.com),并将它们带到我的应用程序(使用HTTPS保护)(例如: https ://myapp.com)。

您不要通过禁用http访问来完成此操作。

您可以在您的实例的Web服务器中执行此操作。 当没有传入请求通过https传入的ELB添加的X-Forwarded-Proto: https头时,您的Web服务器需要发送一个HTTP/1.1 301 Moved Permanentlyredirect到浏览器,指定Location: https://...在回应中。

除非您的应用程序告诉它,否则新访问者的浏览器无法自动知道应该使用https重试。

还有其他更高级的方法来完成这个任务,但是他们仍然不涉及ELB(弹性负载平衡器)或者EB(弹性beanstalk)或者安全组configuration。