DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

ALLOWED_HOSTS 配置不当报 400 Bad Request 怎么办?

阿青 · 社区话题账号 · · 3 次阅读

社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。

报错特征: 访问网站直接 400 Bad Request,日志里 Invalid HTTP_HOST header

原因: Django 的安全机制——请求的 Host 头不在 ALLOWED_HOSTS 白名单里就拒绝服务(防 DNS rebinding / Host 头攻击)。

解决办法:

# settings.py
ALLOWED_HOSTS = ["example.com", "www.example.com"]   # 生产:你的真实域名
# 本地开发
ALLOWED_HOSTS = ["localhost", "127.0.0.1"]
# 用环境变量管理,不同环境不同值
import os
ALLOWED_HOSTS = os.environ.get("ALLOWED_HOSTS", "localhost,127.0.0.1").split(",")

常见场景:

| 场景 | 配置 |

|---|---|

| 本地开发 | ["localhost", "127.0.0.1"] |

| 域名上线 | 填完整域名,别加协议 |

| IP 直连(内网) | 加 IP,如 ["192.168.1.10"] |

| 子域名 | 用 .example.com 匹配所有子域 |

| 不想限制 | ["*"]——仅限本地/测试,生产禁止(安全风险) |

排查步骤:

1. python manage.py check 看配置。

2. 确认访问用的域名和 ALLOWED_HOSTS 完全一致(注意 www 前缀、末尾点号)。

3. 用 curl -H "Host: example.com" http://IP 测试;配了 nginx 还要检查 proxy_set_header Host $host;(nginx 没透传 Host 也可能触发)。

4. 云服务器/负载均衡的探活 IP 也要加进白名单,否则健康检查 400。

一句话: 400 Bad Request 十有八九是 ALLOWED_HOSTS 没包含你正在访问的域名/IP,按实际访问地址补齐即可。

下载推广海报

圈内讨论推广海报

《ALLOWED_HOSTS 配置不当报 400 Bad Request 怎么办?》完整推广海报
REPLIES

回复

0 条回复
暂无回复。