django_tenants子域名无法解析问题排查求助
排查与解决步骤
1. 修复本地DNS解析(最常见原因)
demo.localhost无法解析且无请求记录,说明请求根本没发到Django服务器,这是本地DNS未将子域名指向127.0.0.1导致的:
- 编辑hosts文件:
- Windows:
C:\Windows\System32\drivers\etc\hosts - macOS/Linux:
/etc/hosts - 添加条目:
127.0.0.1 demo.localhost
- Windows:
- 刷新DNS缓存:
- Windows:执行
ipconfig /flushdns - macOS:执行
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder - Linux:执行
sudo systemctl restart systemd-resolved(不同发行版可能有差异)
- Windows:执行
2. 调整服务器绑定地址
你当前用localhost:8000启动服务器,仅监听127.0.0.1的请求,部分环境下子域名请求可能无法匹配这个绑定。改为监听所有接口:
python3 manage.py runserver 0.0.0.0:8000
之后再尝试访问demo.localhost:8000。
3. 验证租户域名配置
确保创建租户时的Domain对象配置正确:
- 检查
django_tenants_domain表中,domain_url字段为demo.localhost(不能带端口) - 用Django shell快速验证:
python3 manage.py shell from django_tenants.models import Domain for domain in Domain.objects.all(): print(f"Domain: {domain.domain_url}, Tenant: {domain.tenant.name}")
确认输出包含demo.localhost对应的租户。
4. 日志排查方法
- 浏览器端:按F12打开开发者工具→网络标签,访问子域名,查看请求状态:
- 若显示
DNS_PROBE_FINISHED_NXDOMAIN:DNS解析失败,回到步骤1 - 若显示
Connection refused:服务器未监听对应地址/端口,回到步骤2
- 若显示
- Django端:在
settings.py添加日志配置,捕获租户中间件的处理细节:
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': {'console': {'class': 'logging.StreamHandler'}}, 'loggers': { 'django_tenants': {'handlers': ['console'], 'level': 'DEBUG'}, 'django.request': {'handlers': ['console'], 'level': 'DEBUG'}, } }
重启服务器后,查看终端日志,确认请求是否进入Django,以及租户匹配过程。
内容的提问来源于stack exchange,提问作者Craig P
相关产品推荐
相关产品推荐

