迁移至Cloudflare托管的HTTPS后Django项目出现CORS及CSRF验证失败问题
迁移至Cloudflare托管的HTTPS后Django项目出现CORS及CSRF验证失败问题
嘿,我完全懂你现在的困扰——之前HTTP下跑的好好的Django项目,一迁移到Cloudflare的HTTPS就碰到CSRF验证失败,连admin面板都登不进去,太闹心了。咱们先捋清楚你当前配置里的问题,再一步步调整解决。
首先,你的配置里有几个明显的小错误得先修正:
- 你写的
ALLOW_ALL_ORIGINS其实应该是CORS_ALLOW_ALL_ORIGINS,Django的CORS库不认前者,这会导致你想允许所有来源的配置根本不生效; CORS_ALLOWED_ORIGINS里的第三个条目www.example-domain.live既缺双引号又没加https://前缀,格式不对也会让这条配置失效。
其次,因为Cloudflare是反向代理,Django需要明确识别来自它的HTTPS请求,同时信任你的域名作为CSRF的合法来源,你现在的配置里少了几个关键项:
- 你只设置了
CORS_CSRF_COOKIE_SECURE = True,但Django本身的CSRF_COOKIE_SECURE也得设为True,确保CSRF Cookie只通过HTTPS传输; - 必须添加
CSRF_TRUSTED_ORIGINS,把你的域名加进去,不然Django会认为来自Cloudflare的请求是不可信的,直接拒绝CSRF验证。
下面是修正后的完整配置,你可以直接替换使用:
# CORS相关配置 CORS_ALLOW_CREDENTIALS = True CORS_ALLOW_ALL_ORIGINS = True # 修正变量名 CORS_ALLOWED_ORIGINS = [ "https://example-domain.live", "https://www.example-domain.live", "https://www.example-domain.live" # 补上https前缀和引号,修正格式 ] CORS_CSRF_COOKIE_SECURE = True # 反向代理适配配置 USE_X_FORWARDED_HOST = True SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') # CSRF关键补充配置 CSRF_COOKIE_SECURE = True CSRF_TRUSTED_ORIGINS = [ "https://example-domain.live", "https://www.example-domain.live" ]
最后还有两个实用小建议:
- 清除浏览器缓存和Cookie:旧的HTTP环境下的Cookie可能会和HTTPS的冲突,建议清除对应域名的Cookie后再测试,或者用隐身模式打开admin面板试试;
- 检查Cloudflare SSL设置:确保Cloudflare的SSL/TLS模式设置为「严格」(如果你的服务器本身已经配置了HTTPS证书)或者「灵活」(如果服务器还没配HTTPS),同时开启「自动HTTPS重定向」,避免混合内容问题。
备注:内容来源于stack exchange,提问作者Lord Konadu Kweku
相关产品推荐
相关产品推荐

