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

Azure部署Django应用自定义域名登录触发CSRF错误排查

Django Azure部署自定义域名登录CSRF错误排查与解决

核心问题分析

错误提示明确显示Origin checking failed - https://www.i-heart-java.com does not match any trusted origins,但你已在配置中添加对应域名,大概率是以下两个配置问题导致:

1. ALLOWED_HOSTS格式不符合Django要求

ALLOWED_HOSTS用于验证请求的主机名,不需要包含http:///https://协议前缀,也不能带末尾斜杠。你当前配置里的'https://i-heart-java.com/'、'https://www.i-heart-java.com/'都是无效格式,Django无法正确匹配。

2. 未配置Azure反向代理的信任头

Azure App Service作为反向代理,会将真实请求的协议、主机名通过X-Forwarded-Proto、X-Forwarded-Host头传递给Django,但Django默认不信任这些头,导致它识别到的请求Origin或协议与实际不符,进而触发CSRF验证失败。

修复步骤

第一步:修正ALLOWED_HOSTS格式

将ALLOWED_HOSTS中的所有带协议和斜杠的项改为纯主机名:

ALLOWED_HOSTS = [
    '127.0.0.1',
    'i-heart-java-XXX.eastus-0X.azurewebsites.net',
    'i-heart-java.com',
    'www.i-heart-java.com',
    # 其他合法主机名...
]

第二步:添加Azure代理头信任配置

在settings.py中添加以下配置,让Django信任Azure的反向代理头:

# 信任Azure的X-Forwarded-Proto头,识别真实请求协议(http/https)
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# 启用X-Forwarded-Host头,获取真实的主机名
USE_X_FORWARDED_HOST = True

第三步:验证CSRF_TRUSTED_ORIGINS配置

确保CSRF_TRUSTED_ORIGINS中的域名格式正确(带协议,无末尾斜杠),你的当前配置是正确的,可再检查拼写:

CSRF_TRUSTED_ORIGINS = [
    "https://i-heart-java.com",
    "http://i-heart-java.com",
    "https://www.i-heart-java.com",
    "http://www.i-heart-java.com",
    # 其他可信源...
]

第四步:调整SSL相关配置(可选)

既然已启用SESSION_COOKIE_SECURE和CSRF_COOKIE_SECURE,建议将SECURE_SSL_REDIRECT设为True,强制所有请求跳转至HTTPS,避免混合内容问题:

SECURE_SSL_REDIRECT = True

关于DNS的疑问

从错误信息和配置来看,DNS设置应该没有问题——因为你已经能访问自定义域名,只是登录时触发CSRF错误。如果DNS有问题,你根本无法通过自定义域名打开站点。

内容的提问来源于stack exchange,提问作者Dan M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:52:13