You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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或控制台连接),手动检查配置:

  1. 进入应用目录:cd /var/app/current
  2. 启动Django shell:
python manage.py shell --settings=config.settings.production
  1. 在shell里执行:
from django.conf import settings
print(settings.ALLOWED_HOSTS)

如果输出的列表里没有报错的IP,说明配置没正确加载,回到前面的步骤排查环境变量或配置文件。

内容的提问来源于stack exchange,提问作者Heartthrob_Rob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:39:52