Amazon web services Elastic Beanstalk健康状况严重,代码为400,失败——即使我可以访问我的网站

Amazon web services Elastic Beanstalk健康状况严重,代码为400,失败——即使我可以访问我的网站,amazon-web-services,amazon-elastic-beanstalk,aws-elb,Amazon Web Services,Amazon Elastic Beanstalk,Aws Elb,我有一个Django应用程序在Elastic Beanstalk上运行。我可以在example.com访问我的网站,没有问题。我已经设置了自动https重定向,所以它总是指向https。我已经设置好了,这样你就不能查看网站example.elasticbeanstalk.com域了——如果你去了那里,你最终得到的响应代码是400 我的自动缩放组是负载平衡的。我的应用程序未通过健康检查,状态代码为400,即使我可以导航到我的站点,但响应代码为200,没有问题。我的日志显示: ***亚马逊IP***

我有一个Django应用程序在Elastic Beanstalk上运行。我可以在
example.com
访问我的网站,没有问题。我已经设置了自动https重定向,所以它总是指向https。我已经设置好了,这样你就不能查看网站
example.elasticbeanstalk.com
域了——如果你去了那里,你最终得到的响应代码是400

我的自动缩放组是负载平衡的。我的应用程序未通过健康检查,状态代码为400,即使我可以导航到我的站点,但响应代码为200,没有问题。我的日志显示:

***亚马逊IP***(-)-[date]“GET/HTTP/1.1”400 26“-“ELB HealthChecker/2.0”

我猜这个错误是因为

  • 不允许在
    example.elasticbeanstalk.com连接
  • Haivng自动HTTP->HTTPS重定向(尽管我猜会出现302)

  • 当健康检查ping站点时,是ping您的自定义域(
    example.com
    )还是ping
    elasticbeanstalk.com
    域?我可以做些什么来修复此问题或进一步诊断错误?我宁愿不允许在
    elasticbeanstalk.com
    域上进行通信,因为我认为我无法在该域上获得SSL。

    失败的原因是健康检查检查检查EC2实例的私有IP。这可能会随着ELB而改变,因此您需要动态获取实例的私有IP并将其添加到主机。看

    (可能)错误答案

    我在另一家商店找到了这个答案。虽然它解决了问题,但我认为这不是一个好的答案,可能是不安全的

    如果您将此代码添加到
    .ebextensions/something.config
    文件中,它会将来自健康检查器的任何请求以及特定状态请求重定向到您的域

    files:
      "/etc/httpd/conf.d/eb_healthcheck.conf":
        mode: "000644"
        owner: root
        group: root
        content: |
            <If "req('User-Agent') == 'ELB-HealthChecker/2.0' && %{REQUEST_URI} == '/status/'">
                RequestHeader set Host "sub.example.com"
            </If>
    
    文件:
    “/etc/httpd/conf.d/eb_healthcheck.conf”:
    模式:“000644”
    所有者:root
    组:根
    内容:|
    RequestHeader设置主机“sub.example.com”
    
    /status/
    替换为域中
    Config->Loan Balancer->health check Path
    sub.example.com
    中指定的健康检查url。他们还更新了health checker,现在是ELB HealthChecker/2.0,这是另一件需要注意的事情


    然而:出于安全原因,它可能不太好,我认为这可能是欺骗。如果您使用的是默认的
    /
    链接,则有人可能伪造
    ELB HealthChecker/2.0
    ,然后很容易猜到您的链接。我不太熟悉使用
    set Host
    命令可以做什么,它可能是无害的。

    失败的原因是运行状况检查检查EC2实例的私有IP。这可能会随着ELB而改变,因此您需要动态获取实例的私有IP并将其添加到主机。看

    (可能)错误答案

    我在另一家商店找到了这个答案。虽然它解决了问题,但我认为这不是一个好的答案,可能是不安全的

    如果您将此代码添加到
    .ebextensions/something.config
    文件中,它会将来自健康检查器的任何请求以及特定状态请求重定向到您的域

    files:
      "/etc/httpd/conf.d/eb_healthcheck.conf":
        mode: "000644"
        owner: root
        group: root
        content: |
            <If "req('User-Agent') == 'ELB-HealthChecker/2.0' && %{REQUEST_URI} == '/status/'">
                RequestHeader set Host "sub.example.com"
            </If>
    
    文件:
    “/etc/httpd/conf.d/eb_healthcheck.conf”:
    模式:“000644”
    所有者:root
    组:根
    内容:|
    RequestHeader设置主机“sub.example.com”
    
    /status/
    替换为域中
    Config->Loan Balancer->health check Path
    sub.example.com
    中指定的健康检查url。他们还更新了health checker,现在是ELB HealthChecker/2.0,这是另一件需要注意的事情

    然而:出于安全原因,它可能不太好,我认为这可能是欺骗。如果您使用的是默认的
    /
    链接,则有人可能伪造
    ELB HealthChecker/2.0
    ,然后很容易猜到您的链接。我不太熟悉使用
    sethost
    命令可以做什么,它可能是无害的