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

部署Django到Elastic Beanstalk:Route53域名ALLOWED_HOSTS问题排查

Django部署AWS Elastic Beanstalk后www子域名400错误排查

环境与配置情况

  • AWS Route53托管区域example.com,配置2条A别名记录,均指向Elastic Beanstalk环境,对应主域名example.com和子域名www.example.com
  • Django应用的ALLOWED_HOSTS配置如下:
ALLOWED_HOSTS = [
  ‘env-example.eba-emvtkupp.us-west-1.elasticbeanstalk.com’,
  ‘example.com’,
  ‘www.example.com’,
  ‘https://example.com’,
  ‘https://www.example.com’,
]

问题现象

  • 访问example.com正常,但访问www.example.com时浏览器返回Bad Request (400)
  • 将ALLOWED_HOSTS中的www.example.com替换为通配符.example.com后,www.example.com可正常访问,但担心通配符带来安全隐患,希望明确原配置失效的原因

核心原因分析

  1. 中文引号导致匹配失败
    配置中所有域名使用的是中文单引号‘’,而非Python要求的英文单引号''。Django在验证请求的Host头时会进行严格的字符串匹配,中文引号包裹的域名与实际请求的www.example.com Host值无法匹配,直接触发400错误。

  2. 无效的带协议域名配置
    ALLOWED_HOSTS仅接受纯主机名(不含协议前缀),你添加的https://example.com和https://www.example.com属于无效配置,不会被Django识别,直接被忽略。

正确配置方案

修正引号格式并移除无效的带协议域名,配置如下:

ALLOWED_HOSTS = [
    'env-example.eba-emvtkupp.us-west-1.elasticbeanstalk.com',
    'example.com',
    'www.example.com',
]

通配符安全说明

.example.com这类通配符会匹配example.com下的所有子域名(如test.example.com、admin.example.com等),若业务无需支持所有子域名,会存在主机头伪造攻击的风险。建议始终明确指定需要支持的域名,避免使用通配符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 22:12:32