
本文详解如何正确配置 Django 的 ALLOWED_HOSTS 和开发服务器启动参数,使局域网内其他设备能安全访问你的 Django 应用,涵盖 IP 设置、HTTPS/CSRF 适配、防火墙与网络验证要点。
本文详解如何正确配置 django 的 `allowed_hosts` 和开发服务器启动参数,使局域网内其他设备能安全访问你的 django 应用,涵盖 ip 设置、https/csrf 适配、防火墙与网络验证要点。
在 Django 开发阶段,常需让团队成员或测试设备通过局域网访问本地服务(如 192.25.56.120:8000)。但默认情况下,Django 的 runserver 仅绑定 127.0.0.1 且严格校验请求 Host 头——若配置不当,外部访问将直接返回 DisallowedHost 错误。以下为完整、安全、可落地的配置方案。
✅ 正确配置 ALLOWED_HOSTS
ALLOWED_HOSTS 必须显式包含客户端实际访问所用的 Host 值(即 URL 中的域名或 IP),而非服务器本机名或通配符 0.0.0.0(它不是有效 Host,Django 会忽略)。
针对你的场景(服务端 IP 192.25.56.120,客户端通过 https://192.25.56.120:8000 访问),应修改 settings.py 如下:
# settings.py
ALLOWED_HOSTS = [
"127.0.0.1",
"localhost",
"192.25.56.120", # ← 必须添加:客户端浏览器地址栏输入的 IP
# "TestPC-A", # ← 不推荐:依赖 DNS 或 hosts 解析,不稳定
]
# 若使用 HTTPS(如 --cert-file),还需配置 CSRF 信任源
CSRF_TRUSTED_ORIGINS = [
"http://127.0.0.1:8000",
"http://localhost:8000",
"https://192.25.56.120:8000", # ← 与 ALLOWED_HOSTS 一致,协议+IP+端口
]⚠️ 注意:"0.0.0.0" 是无效 Host,必须删除;"TestPC-A" 仅在所有客户端均正确配置了 hosts 文件时才可能生效,但调试复杂且易出错,强烈建议直接使用 IP 地址。
✅ 启动服务:绑定到所有网络接口
runserver 默认只监听 127.0.0.1(本地环回),需显式指定 0.0.0.0:
:: runserver.bat(修正版) @echo off cmd /k ".venv\Scripts\activate && python manage.py runserver_plus --cert-file cert.pem --key-file key.pem 0.0.0.0:8000"
✅ 关键点:0.0.0.0:8000 表示“监听本机所有 IPv4 网络接口的 8000 端口”,此时 192.25.56.120:8000 才真正可达。
ECTouch是上海商创网络科技有限公司推出的一套基于 PHP 和 MySQL 数据库构建的开源且易于使用的移动商城网店系统!应用于各种服务器平台的高效、快速和易于管理的网店解决方案,采用稳定的MVC框架开发,完美对接ecshop系统与模板堂众多模板,为中小企业提供最佳的移动电商解决方案。ECTouch程序源代码完全无加密。安装时只需将已集成的文件夹放进指定位置,通过浏览器访问一键安装,无需对已有
? 必须检查的系统级限制
即使 Django 配置正确,以下系统层障碍仍会导致连接失败:
-
Windows 防火墙:默认阻止入站 TCP 连接。需放行端口 8000:
New-NetFirewallRule -DisplayName "Django Dev Server" -Direction Inbound -Protocol TCP -LocalPort 8000 -Action Allow
- 路由器/交换机隔离:确认两台机器在同一子网(如 192.25.56.0/24),且无 VLAN 或 AP 隔离策略。
-
HTTPS 证书问题:若使用 --cert-file,浏览器会因自签名证书报 NET::ERR_CERT_AUTHORITY_INVALID。此时需:
- 在客户端浏览器手动访问 https://192.25.56.120:8000 → 点击“高级”→“继续前往(不安全)”;
- 或改用 HTTP 启动(临时调试):python manage.py runserver 0.0.0.0:8000,并同步调整 CSRF_TRUSTED_ORIGINS 为 http://...。
? 验证连通性(分步排查)
-
服务端自查:在 TestPC-A 上执行
ping 192.25.56.120 # 应通 telnet 192.25.56.120 8000 # 若失败,说明服务未监听或防火墙拦截
-
客户端验证:在另一台机器上执行
ping 192.25.56.120 # 确认网络可达 curl -v http://192.25.56.120:8000 # 查看 HTTP 响应头与状态码
浏览器访问:直接打开 http://192.25.56.120:8000(HTTP)或 https://192.25.56.120:8000(HTTPS,需忽略证书警告)。
✅ 总结:最小可靠配置清单
| 项目 | 正确值 | 错误示例 | 说明 |
|---|---|---|---|
| ALLOWED_HOSTS | ["192.25.56.120"] | ["0.0.0.0", "TestPC-A"] | 必须是客户端访问 URL 中的 Host |
| CSRF_TRUSTED_ORIGINS | ["http://192.25.56.120:8000"] | 缺失或协议/端口不匹配 | HTTPS 下必需,且协议与端口必须精确对应 |
| runserver 绑定 | 0.0.0.0:8000 | 127.0.0.1:8000 或省略 | 否则仅限本机访问 |
| 系统防火墙 | 开放 TCP 8000 入站 | 未配置 | Windows Defender 防火墙默认阻止 |
? 提示:生产环境绝不可使用 runserver 或开放 ALLOWED_HOSTS = ["*"]。本文方案仅适用于受控局域网内的开发/测试场景。上线前务必切换至 Gunicorn/Nginx + 正式 SSL 证书 + 严格 Host 白名单。









