负载均衡器后面的AWS EC2上的Django HTTP_HOST错误

时间:2016-08-08 19:57:02

标签: python django apache amazon-web-services amazon-ec2

我有一个Django应用程序,使用在AWS ELB平衡器后面的EC2实例上运行的Apache和mod_wsgi。平衡器将SSL流量(端口443)映射到EC2实例上的端口8080。 Apache在端口8080上配置了VirtualHost以服务Django应用程序,ServerName设置为网站的域名。 Django以生产模式运行(DEBUG = False),并公开了一个healtcheck端点(在/ healtcheck)。 ALLOWED_HOSTS设置被设置为网站的域名,加上EC2实例的私有IP地址,以便允许Load Balancer访问healthcheck端点。

这个设置一切正常。问题是我不断收到来自Django的电子邮件突发,其错误消息类似于:new EmailService() 标题还包含ERROR (EXTERNAL IP): Invalid HTTP_HOST header: '52.51.147.134'. You may need to add u'52.51.147.134' to ALLOWED_HOSTS.

我认为属于脚本小子的各种IP地址(有时是主机名)。

如何阻止此流量到达Django应用,同时仍然允许有效流量(HTTP_HOST是我的域名)和ELB运行状况检查流量(其中HTTP_HOST是我的EC2私有IP地址)?

1 个答案:

答案 0 :(得分:1)

我建议您只允许使用安全组从您的EC2实例获取流量,如果您通过SSH连接到EC2实例,则允许您的办公室/家庭的IP地址。

http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-security-groups.html#elb-vpc-instance-security-groups

这将阻止脚本小子直接命中EC2实例,这就是这里发生的事情。