当前位置: 首页 > 知识库问答 >
问题:

负载平衡器后面的AWS EC2上的Django HTTP_主机错误

安高翰
2023-03-14

我有一个Django应用程序,使用Apache和mod\u wsgi在AWS ELB平衡器后面的EC2实例上运行。平衡器将SSL流量(端口443)映射到EC2实例上的端口8080。Apache在端口8080上配置了一个VirtualHost来服务Django应用程序,服务器名设置为网站的域名。Django以生产模式(DEBUG=False)运行,并公开一个healtcheckendpoint(at/healtcheck)。ALLOWED\u HOSTS设置设置为网站的域名加上EC2实例的私有IP地址,以便负载平衡器能够访问healthcheckendpoint。

这种设置一切正常。问题是,我偶尔会收到来自Django的大量电子邮件,其中包含类似以下错误消息:<代码>错误(外部IP):无效的HTTP\U主机头:“52.51.147.134”。您可能需要将u'52.51.147.134'添加到ALLOWED\u HOSTS 标头还包含HTTP\u X\u FORWARDED\u FOR='139.162.13.205'

我有各种各样的IP地址(有时还有主机名),我想应该属于脚本小子。

如何阻止这些流量到达Django应用程序,同时仍然允许有效流量(HTTP_HOST是我的域名)和ELB健康检查流量(HTTP_HOST是我的EC2私有IP地址)?

共有1个答案

常自怡
2023-03-14

我建议,如果您使用SSH连接到EC2实例中,则只允许使用安全组和办公室/家庭的IP地址从负载平衡器在EC2实例上进行通信。

http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-security-groups.html#elb-vpc实例安全组

这将阻止脚本孩子直接访问EC2实例,这就是这里发生的事情。

 类似资料:
  • 我有一个非常简单的Spring Boot应用程序,具有社交单点登录功能。 看起来是这样的: 它在应用程序中有必需的条目。yml: 它在我的本地机器上运行得很好,并且只启动了一个实例。 当有多个实例隐藏在负载平衡器后面时,就会出现问题。 即使用户在第一个请求中进行身份验证,向负载均衡器发出的后续请求也会因401而被阻止。 与第一个应用程序实例相比,请求被路由到不同的应用程序实例。 我正在试图弄清楚,

  • 我已经按照用户指南在库伯内特斯上实现了Traefik。这给了我一个入口控制器,我能够在80和8080上创建一个入口和traefik-ingress-service监听。 我还设置了“gce”入口: 这样做的目的是创建一个GCE负载平衡器,它终止我的TLS,并将所有请求转发给NodePort类型的traefik入口服务。 GCE负载平衡器需要进行健康检查。默认为路径“/”。我以为traefik有个“

  • 这意味着Zookeeper将负载均衡器理解为一个客户机,并与之建立联系。但是负载均衡器只是ping TCP2181就出来了。

  • 目标:将弹性/静态IP分配给负载平衡器(LB),以服务于处理DNS(端口53)、HTTPS(端口443)、HTTP(端口80)的EC2实例。 需要静态IP来正确配置DNS记录(即A记录)。需要在后端/服务器上终止TLS,以提供无限制的 经典的负载平衡器允许自定义安全规则,并允许在EC2实例上终止SSL。问题是静态IP不能分配给经典LB,只能分配给其中的单个实例,这无法平衡负载。 要分配静态IP,我

  • 我有一个在AWS上运行的项目。结构如下: 我已使用AWS证书管理器为负载平衡器创建了一个证书。所以现在的流量是: 但由于加载网页时实例上没有证书,因此会收到“站点不安全”警告。 如何创建从客户端到负载均衡器后面的任何实例的完整SSL连接? 编辑 以下是nginx配置(适用于所有实例)

  • 如果您需要在任意端口上公开和负载平衡TCP或UDP服务,您会怎么做?我曾考虑使用ClientIP,这样服务就可以获得自己的VIP,并且可以使用自己想要的任何端口,但问题就变成了,如何将流量路由到这些VIP,并给他们提供友好的DNS名称?是否已经有一个解决方案,或者你必须自己建立一个?使用NodePort或任何意味着名称空间必须共享单个端口范围的解决方案都不是真正可伸缩的或可取的。特别是如果名称空间