Infinite redirection loop for Django backend (hosted on railway) application (hosted on cloudfare)

tl;dr I'm getting an infinite loop when I request my django backend, and I don't know how to fix it

I'll give some context to what's happening:

  • My django backend works on localhost (I used nginx as a reverse proxy when developing it)
  • I've got a cloudfare domain, and I've registered by backend to it on railway
  • when I try to connect to the backend over the Cloudflare domain, I keep getting redirected to the page I requested- so it's an infinite loop
  • I'll give some outputs to show what's happening

Request headers:

Request URL:
https:... <--- my project domain 
Request Method:
GET
Status Code:
301 Moved Permanently
Remote Address:
x.x.x.x:443
Referrer Policy:
strict-origin-when-cross-origin

And the response:

alt-svc:
h3=":443"; ma=86400
cf-cache-status:
DYNAMIC
cf-ray:
92efc2dfbffc57dd-SYD
content-type:
text/html; charset=utf-8
date:
Sat, 12 Apr 2025 03:50:44 GMT
location:
... <--- same domain name as I requested
nel:
{"success_fraction":0,"report_to":"cf-nel","max_age":604800}
report-to:
{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v4?s=BY0YmE3vW8uxgXBlVKUb%2BBuxQrbGw%2F2J2wEGzGndoKueBiCzA%2FYkGsADUkrcMq6KC02ocvzetSIzDhSun56YdCECv04ANU3UaaxEzBQ6%2BnNfN9r5tmjhDD53DHq3IPVCnWnwPw%3D%3D"}],"group":"cf-nel","max_age":604800}
server:
cloudflare
server-timing:
cfL4;desc="?proto=QUIC&rtt=8014&min_rtt=7349&rtt_var=1550&sent=12&recv=11&lost=0&retrans=0&sent_bytes=3715&recv_bytes=3440&delivery_rate=821&cwnd=12000&unsent_bytes=0&cid=b1e2e4808802a704&ts=2802&x=16"
x-railway-edge:
railway/us-west2
x-railway-request-id:
hd3fL70KS824dNgkcC4bnQ_3336177264

This request and response keep happening until the browser steps in.

If I curl the endpoint, I just get:

<a href="my backend domain">Moved Permanently</a>.

So Cloudflare has the flexible SSL/TLS encryption mode, and in my settings.py, I have:

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SECURE_SSL_REDIRECT = False

I've tried removing/toggling these settings in settings.py, but to no avail. Changing the SSL/TLS mode to full or full (strict) in Cloudflare also doesn't fix the issue (full strict causes a bad gateway).

So my question is: what do I need to have in my settings.py and/or Cloudfare to prevent this infinite loop? Where in my backend code should I check to fix this?

Please do request more information if needed.

Вернуться на верх