【问题标题】:Elastic Beanstalk Django App REST API Fails with Multiple EC2 InstancesElastic Beanstalk Django 应用程序 REST API 因多个 EC2 实例而失败
【发布时间】:2018-07-19 17:19:05
【问题描述】:

我正在通过 Elastic Beanstalk 环境运行 DJango 应用程序,该环境设置为在服务器负载达到特定水平时扩展到多个实例。

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

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

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

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

【问题讨论】:

    标签: django amazon-elastic-beanstalk amazon-elb


    【解决方案1】:

    我终于解决了这个问题。它根本与 CORS 无关。问题围绕 Elastic Load Balancer 的健康状况展开。在 Django 应用程序成功安装和启动之前,健康状态立即恢复正常。因此,我的请求试图访问一个甚至没有运行的服务。为了解决这个问题,我为 ELB 创建了一个自定义运行状况检查。

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

    【讨论】:

      猜你喜欢
      • 2019-09-09
      • 2013-11-21
      • 2018-08-31
      • 2012-06-13
      • 2016-01-15
      • 2021-05-05
      • 2014-08-28
      • 2020-11-14
      • 2018-04-18
      相关资源
      最近更新 更多