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

自定义域名访问Django Azure Web App报400错误求助

Django Azure Web App自定义域名访问400错误排查方案

当前情况

  • 已将Django部署到Azure Web App,绑定了GoDaddy购买的自定义域名和Azure提供的SSL证书
  • 通过Azure默认域名可正常访问,但自定义域名访问时返回400 Bad Request错误
  • 已完成的操作:
    • 将默认域名和自定义域名添加至CSRF_TRUSTED_ORIGINS与ALLOWED_HOSTS列表
    • 在Azure Web App配置中开启了HTTP转HTTPS
    • 在GoDaddy添加了指向服务器公网IP的A记录和域名验证用的TXT记录
    • 尝试过settings.py中的HTTPS配置,但问题仍未解决

具体排查与解决步骤

1. 检查CSRF_TRUSTED_ORIGINS的格式是否正确

  • 必须包含完整的协议前缀(https://),不能只写域名,示例:
    CSRF_TRUSTED_ORIGINS = [
        'https://your-custom-domain.com',
        'https://www.your-custom-domain.com',
        'https://your-azure-app.azurewebsites.net'
    ]
    
  • 如果有www子域名,务必单独添加,否则会触发CSRF验证失败导致400错误

2. 确认ALLOWED_HOSTS的配置

  • 新手排查可以先临时设置为ALLOWED_HOSTS = ['*']测试,如果能访问,说明是域名没加全
  • 生产环境建议指定具体域名,示例:
    ALLOWED_HOSTS = [
        'your-custom-domain.com',
        'www.your-custom-domain.com',
        'your-azure-app.azurewebsites.net'
    ]
    

3. 验证Azure的SSL绑定状态

  • 登录Azure门户,进入你的Web App -> 左侧菜单选择「自定义域名」
  • 确认自定义域名旁的SSL状态显示「已绑定」,且证书状态为有效
  • 如果未绑定,重新绑定Azure提供的SSL证书

4. 确保SECURE_PROXY_SSL_HEADER配置生效

  • Azure Web App需要这个配置来识别代理传递的HTTPS协议,你的配置('HTTP_X_FORWARDED_PROTO', 'https')是正确的
  • 可以在Django视图中临时添加代码打印请求头,确认是否能获取到https:
    def test_view(request):
        print(request.META.get('HTTP_X_FORWARDED_PROTO'))
        return HttpResponse("Test")
    
  • 如果打印结果是https,说明代理头传递正常;如果是http,需要检查Azure的HTTP转HTTPS配置是否正确

5. 清除浏览器缓存和Cookie

  • 旧的HTTP缓存或Cookie可能导致验证失败,用浏览器隐私模式访问试试,或者手动清除缓存后再测试

6. 检查GoDaddy的DNS记录是否生效

  • 用nslookup your-custom-domain.com命令(或在线DNS查询工具),确认A记录指向的IP和Azure Web App的公网IP完全一致
  • 检查TXT记录的验证字符串是否和Azure提供的完全匹配,确保域名所有权验证通过

7. 逐步开启HTTPS配置排查

  • 先将SECURE_SSL_REDIRECT = True改为False,测试自定义域名是否能正常访问
  • 如果能访问,再逐一开启其他HTTPS配置(比如SESSION_COOKIE_SECURE、CSRF_COOKIE_SECURE等),每次修改后部署测试,找到可能冲突的配置

示例有效settings.py关键配置

# 允许的主机列表
ALLOWED_HOSTS = ['your-custom-domain.com', 'www.your-custom-domain.com', 'your-azure-app.azurewebsites.net']

# CSRF信任的源(必须带https://)
CSRF_TRUSTED_ORIGINS = ['https://your-custom-domain.com', 'https://www.your-custom-domain.com', 'https://your-azure-app.azurewebsites.net']

# Azure代理SSL头配置
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

# HTTPS安全配置(测试正常后开启)
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
X_FRAME_OPTIONS = 'DENY'
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:10:09