Ruby on rails EC2负载平衡器SSL仅在某些子域上

Ruby on rails EC2负载平衡器SSL仅在某些子域上,ruby-on-rails,amazon-web-services,amazon-ec2,load-balancing,Ruby On Rails,Amazon Web Services,Amazon Ec2,Load Balancing,我有一个弹性Beanstalk Rails应用程序。我还有两个领域: api.example.com www.example.com 我希望api.example.com只能通过SSL访问 但是,我希望www.example可以通过正常的http访问 目前,我的负载平衡器上有两个侦听器,一个在端口443上,另一个在80上 问题是您现在还可以在不使用SSL的情况下访问api,这是不可取的 我的问题有服务器级解决方案吗?Elastic Beanstalk本身不允许您在应用程序上解耦SSL和非SSL

我有一个弹性Beanstalk Rails应用程序。我还有两个领域:

api.example.com
www.example.com
我希望
api.example.com
只能通过SSL访问

但是,我希望
www.example
可以通过正常的http访问

目前,我的负载平衡器上有两个侦听器,一个在端口
443
上,另一个在
80

问题是您现在还可以在不使用SSL的情况下访问
api
,这是不可取的


我的问题有服务器级解决方案吗?

Elastic Beanstalk本身不允许您在应用程序上解耦SSL和非SSL路由。下面是一些你可以做的事情

  • 将弹性Beanstalk应用程序解耦为两个独立的弹性Beanstalk应用程序,一个用于SSL,另一个用于非SSL流量

  • 更改Rails应用程序中的路由设置。这篇文章解释了如何强制某些路由使用SSL:。您可以强制API使用SSL,并让
    www
    流量成为非SSL流量

  • 不要使用Elastic Beanstalk,在EC2中使用autoscaling托管应用程序,并将其设置为Apache或nginx的前端,并创建特定的重写规则,以确保每个URL都按您希望的方式提供(从www到HTTP,从API到SSL)