Azure App Service中Django应用添加自定义域名遇Bad Request(400)
解决Azure App Service中Django自定义域名Bad Request (400)问题
问题根源
Azure的WEBSITE_HOSTNAME环境变量仅包含默认的something.azurewebsites.net域名,自定义域名不会自动注入到该变量中,导致原配置仅允许默认域名访问,自定义域名因不在ALLOWED_HOSTS列表内被拒绝,触发400错误。
解决方案
方案1:手动硬编码自定义域名(适合域名固定的场景)
修改settings.py中的ALLOWED_HOSTS配置,同时保留默认域名的环境变量读取逻辑:
import os # 获取Azure默认主机名 default_host = os.environ.get('WEBSITE_HOSTNAME', '') # 替换为你的实际自定义域名,可添加多个 custom_domains = ['your-custom-domain.com', 'www.your-custom-domain.com'] ALLOWED_HOSTS = [default_host] + custom_domains if default_host else custom_domains
方案2:通过Azure应用设置动态读取自定义域名(适合域名需灵活调整的场景)
- 登录Azure门户,进入你的App Service -> 配置 -> 应用程序设置
- 添加新设置:
- 名称:
CUSTOM_HOSTS - 值:用逗号分隔你的自定义域名,例如
your-custom-domain.com,www.your-custom-domain.com
- 名称:
- 修改
settings.py中的配置:
import os default_host = os.environ.get('WEBSITE_HOSTNAME', '') # 读取自定义域名并分割成列表,过滤空值 custom_domains = [host.strip() for host in os.environ.get('CUSTOM_HOSTS', '').split(',') if host.strip()] ALLOWED_HOSTS = [default_host] + custom_domains if default_host else custom_domains
方案3:临时允许所有域名(仅测试环境使用,禁止生产)
如果是测试场景,可临时设置允许所有域名,但生产环境存在安全风险,请勿使用:
ALLOWED_HOSTS = ['*']
验证步骤
修改配置后,重启Azure App Service使配置生效,访问自定义域名即可正常加载页面。可通过在settings.py中打印ALLOWED_HOSTS或查看应用日志,确认自定义域名已被加入允许列表。
内容的提问来源于stack exchange,提问作者Sangeeth Sajan
相关产品推荐
相关产品推荐

