Elastic Beanstalk Django App REST API 因多个 EC2 实例而失败

Elastic Beanstalk Django App REST API Fails with Multiple EC2 Instances

我是 运行 一个 DJango 应用程序和 Elastic Beanstalk 环境,它被设置为在服务器负载达到一定水平时扩展到多个实例。

Django 应用程序用作 REST API (DRF),我安装了 django-cors-headers [https://github.com/ottoyiu/django-cors-headers] 应用程序来处理来自 Ionic 应用程序的请求。请求是通过 Angular2 的 http 框架发出的,该框架发出 pre-flight 请求。

当只有一个实例时,应用程序和请求工作正常 运行。但是,当 Elastic Beanstalk 启动第二台服务器时,因为它已达到限制,所有请求都开始失败。不需要身份验证的请求与需要身份验证的请求一样会失败。如果我通过邮递员发出请求,它工作正常。所以应该和CORS配置有关。

API 使用 https://github.com/manosim/django-rest-framework-api-key 框架来提供 API 密钥,因此这也是设置的一部分。

我一直在网上浏览并尝试了几乎所有我能找到的东西。我尝试通过 ebextensions 在 apache 配置中手动设置 Headers。我查看了 ngnix 设置,但不确定在那里可以做什么。

我终于解决了这个问题。它与 CORS 完全无关。问题围绕着 Elastic Load Balancer 的健康状态。在成功安装和启动 Django 应用程序之前,健康状态立即 returning 一样好。因此,我的请求试图访问甚至不是 运行 的服务。为了解决这个问题,我为 ELB 创建了一个自定义健康检查。

  • 创建一个名为 health 的 Django 视图,并将其设置为 return 200。您可以将 url 路径设置为任何您想要的路径。我的只是 /health
  • 在您的 ELB 中,将健康检查配置为在端口 80 上使用 HTTP,并将 ping 路径设置为健康页面的 url。 (/健康)
  • 完成。