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

部署在Railway的Django后端通过Cloudflare访问出现无限重定向求助

解决Django后端通过Cloudflare访问时的无限重定向循环问题

一、核心配置调整(settings.py + Cloudflare)

1. Django settings.py 修正

当前配置未完全适配Cloudflare+Railway的代理环境,替换为以下配置:

# 识别Cloudflare/Railway传递的HTTPS协议头
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# 允许自定义域名和Railway后端域名
ALLOWED_HOSTS = ['myproject.com', 'your-railway-backend-domain.railway.app']
# 开启HTTPS重定向(配合代理头使用,避免循环)
SECURE_SSL_REDIRECT = True
# 启用代理传递的主机和端口信息
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = True
# 确保Cookie仅通过HTTPS传输
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

注意:替换your-railway-backend-domain.railway.app为实际的Railway后端域名;若仍有循环,可临时将SECURE_SSL_REDIRECT设为False,排查其他原因。

2. Cloudflare 配置调整

  1. SSL/TLS模式切换:
    • 先在Railway服务中绑定自定义域名myproject.com,Railway会自动生成SSL证书
    • 将Cloudflare的SSL/TLS模式改为Full(不要用Strict,除非你自行上传了SSL证书到Railway)
  2. 关闭冲突规则:
    • 进入Cloudflare的「网络」设置,关闭「自动HTTPS重定向」
    • 检查「页面规则」,若存在强制HTTP转HTTPS的规则,暂时禁用

二、后端代码检查点

  1. URL重定向逻辑:
    • 排查所有视图函数中的重定向代码,禁止硬编码HTTP域名(如redirect('http://myproject.com')),改用反向解析reverse()或相对路径(如redirect('/'))
  2. 自定义中间件:
    • 检查是否有中间件在判断request.is_secure()时强制跳转,若Django未正确识别HTTPS,会导致无限循环
  3. 第三方应用配置:
    • 若使用django-allauth等第三方库,确保相关HTTPS配置正确(如ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https')
  4. Railway服务配置:
    • 确认Railway服务映射的端口与Django运行端口一致(默认8000)
    • 检查环境变量是否正确设置DJANGO_SETTINGS_MODULE

三、调试验证

  • 执行curl -v https://myproject.com,查看响应头中的location字段,确认重定向目标是否异常
  • 在Django视图中打印request.META['HTTP_X_FORWARDED_PROTO'],验证是否为https
  • 临时暂停Cloudflare的缓存功能,测试是否仍存在循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:47:08