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

Cloudflare启用后Django应用4G网络下API返回500错误求助

问题分析与解决方案

1. 先获取Django的真实错误详情

Cloudflare返回的500是通用服务器错误,无法定位具体问题,必须查看Django后端的日志文件(比如Nginx部署下的/var/log/nginx/error.log,或Django自身的控制台输出),找到触发500错误的具体异常栈信息,这是排查的核心步骤。

2. 配置Django信任Cloudflare代理

移动网络下运营商可能添加额外代理头,导致Django处理客户端IP或请求协议时出错:
在Django的settings.py中正确配置信任Cloudflare的代理IP段:

# Cloudflare官方公布的代理IP段
TRUSTED_PROXIES = ['173.245.48.0/20', '103.21.244.0/22', '103.22.200.0/22', '103.31.4.0/22',
                   '141.101.64.0/18', '108.162.192.0/18', '190.93.240.0/20', '188.114.96.0/20',
                   '197.234.240.0/22', '198.41.128.0/17', '162.158.0.0/15', '104.16.0.0/13',
                   '104.24.0.0/14', '172.64.0.0/13', '131.0.72.0/22']
USE_X_FORWARDED_HOST = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

确保Django能通过Cloudflare的X-Forwarded-For正确解析客户端IP,避免因IP逻辑错误触发异常。

3. 对比两种网络的请求头差异

在Django的API视图中临时添加请求头打印代码,对比WIFI和4G下的请求头(如Origin、User-Agent、X-Forwarded-For等):

from django.http import JsonResponse

def debug_api(request):
    print("Request Headers:", dict(request.headers))
    return JsonResponse({"status": "debug"})

重点排查:

  • 移动网络下是否有异常Origin值,导致跨域验证失败(检查Django的CORS_ALLOWED_ORIGINS配置)
  • 是否存在运营商添加的特殊请求头,干扰了Django的业务逻辑

4. 调整Cloudflare基础设置

  • 缓存规则:给API路径添加Cloudflare页面规则,设置Cache Level: Bypass,避免动态API被错误缓存
  • SSL模式:确认Cloudflare的SSL/TLS设置为Full或Full (strict),避免SSL握手异常导致后端报错
  • 临时关闭优化功能:暂时关闭Cloudflare的“自动HTTPS重定向”“Rocket Loader”等功能,测试是否是优化特性与移动网络的兼容性问题

5. 排查CSRF验证问题

如果API是POST/PUT等非GET请求,检查是否是CSRF验证导致的错误:

  • 对于移动端API,可在视图上添加@csrf_exempt装饰器临时排除验证,测试是否恢复正常
  • 或在settings.py中添加信任域名:
    CSRF_TRUSTED_ORIGINS = ['https://your-domain.com']
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:30:56