如何在AWS Elastic Beanstalk上配置Django应用避免Invalid HTTP_HOST header错误
解决Django部署到Elastic Beanstalk的Invalid HTTP_HOST header错误
核心排查与修复方案
1. 确认生产配置文件正确解析环境变量
如果你用的是cookiecutter-django的production.py,要确保环境变量DJANGO_ALLOWED_HOSTS的解析逻辑没有问题,示例代码如下:
# production.py 中的ALLOWED_HOSTS配置 import os ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS", "").split(",")
注意:环境变量的值不能带空格,比如要设置成your-beanstalk-domain.elasticbeanstalk.com,10.0.0.123(替换成你的Beanstalk域名和EC2私有IP),用英文逗号直接分隔。
2. 加入Elastic Load Balancer的健康检查IP
Beanstalk的负载均衡器会用自身IP做健康检查,这个IP也必须加入ALLOWED_HOSTS:
- 登录AWS控制台,进入EC2→负载均衡器,找到对应Beanstalk的ELB,查看其私有IP
- 或者直接把你的VPC内网IP段加入(比如
10.0.0.0/24,根据实际VPC配置调整)
3. 验证配置文件加载优先级
确保Beanstalk运行时加载的是production.py而非base.py,可以在production.py末尾加日志验证:
# production.py 末尾添加 import logging logger = logging.getLogger(__name__) logger.info(f"当前加载的ALLOWED_HOSTS: {ALLOWED_HOSTS}")
之后去Beanstalk控制台→环境→日志→请求日志里查看,确认加载的列表是否包含所有需要的主机。
4. 检查WSGI配置的正确性
虽然你已经配置了WSGIPath: config.wsgi:application,但要确保config/wsgi.py里正确指向生产配置:
# config/wsgi.py import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.production") from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
如果这里写成了config.settings.base,就会导致生产配置完全没生效。
5. 清理缓存并重新部署
- 部署前执行
git clean -fd(注意备份未提交的本地文件),避免残留的本地配置被打包上传 - 在Beanstalk控制台重启环境,或者用
eb deploy --staged重新部署,确保旧配置缓存被清空
快速验证配置的方法
登录Beanstalk的EC2实例(用eb ssh或控制台连接),手动检查配置:
- 进入应用目录:
cd /var/app/current - 启动Django shell:
python manage.py shell --settings=config.settings.production
- 在shell里执行:
from django.conf import settings print(settings.ALLOWED_HOSTS)
如果输出的列表里没有报错的IP,说明配置没正确加载,回到前面的步骤排查环境变量或配置文件。
内容的提问来源于stack exchange,提问作者Heartthrob_Rob
相关产品推荐
相关产品推荐

