Cloudflare 上通过 SSL 的 Elastic Beanstalk

Elastic Beanstalk over SSL on Cloudflare

我在 AWS 上使用 ElasticBeanStalk 作为我的 Parse 环境的一部分。 Elastic Beanstalk URL 是 myparseapp.elasticbeanstalk.com。当用户在我的站点 ("www.example.com") 上注册帐户时,Elastic Beanstalk 会发挥其魔力。

在我在即将上线的网站上启用 SSL 并对其进行测试之前,一切正常。注册失败,我在开发者控制台看到了这个:

parse.min.js:16 Mixed Content: The page at 'https://www.example.com/register.html' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://myparseapp.elasticbeanstalk.com/parse/users'. This request has been blocked; the content must be served over HTTPS.

我明白我收到错误消息的原因。我不清楚如何解决它。我读到的所有内容都说 "register your domain, get an SSL cert, attach a CNAME (www) using Route 53, apply it to the load balancer. Done."

嗯... 1) 我已经有一个用于我的网站的域。 2) 我的 SSL 通过 Cloudflare 提供服务,这是 SSL 终止的地方。 3) 当我的 www.example.com 是我的实际网站时,为什么我要将 CNAME 'www' 分配给 Elastic Beanstalk?使用 CNAME "www" 不会破坏我的网站吗? 4) 我的 Elastic Beanstalk 实例不在负载均衡器后面。

我是否需要为 Elastic Beanstalk 创建一个单独的域?这听起来不对。我可能会看到将其设为子域,例如 parseapp.example.com。

由于我正在使用 Cloudflare(而且我喜欢它),因此我不希望为此使用 Route 53...但如果这是我唯一的选择,那就这样吧。

总而言之,我如何使用 Cloudflare 通过 SSL 访问我的 Elastic Beanstalk 应用程序?

提前感谢您的帮助。

无需查看您在 CloudFlare 中的所有配置,以下是我们如何使用 CloudFlare 和 AWS 为 Parse 设置我们的系统。

如果 Parse Server 实例(在 elasticbeanstalk 上)无法处理 HTTPS:

  • 使用 CloudFlare 设置子域 parse.example.com 作为别名 myparseapp.elasticbeanstalk.com 的 CNAME。
  • 确保云图标为橙色(已打开)。
  • 转到 CloudFlare 中的“加密”选项卡并确保将其设置为 Flexible。这样做将使对任何 example.com 域的所有请求都通过 CloudFlare,这将使用 CloudFlare 的 SSL,但随后 CloudFlare 将通过 HTTP 或 HTTPS 将该请求路由到您的 elasticbeanstalk.com
  • 确保您的 Parse Server URL 现在设置为 https://parse.example.com/parse(在您的 CNAME 中定义)。这将使您的 Ajax 请求看起来像:https://parse.example.com/parse/users 而不是之前的 URL.

如果您可以在您的实例上设置 SSL 证书,您可以配置 CloudFlare 为您提供 Origin Certificates,您可以在您的实例上安装它(请参阅 Crypto 选项卡,在 Origin Certificates 下).这些证书用于保护 CloudFlare 和源服务器之间的连接,在您的例子中是 ElasticBeanstalk。如果您这样做,那么您仍应按照上述步骤操作,但不要在 SSL 上选择 Flexible,而是使用 Full.