Django Admin页面链接全部跳转首页问题求助(ECS+Auth0 SSO环境)
故障根因定位
首先从日志和异常表现可以确认是会话识别失效导致的权限校验不通过,触发了重定向逻辑,和staging的差异大概率来自环境部署层而非代码配置层,对应解决方案如下:
1. 补全反向代理HTTPS识别配置
当前Nginx没有向Django传递HTTPS协议标识,Django会将前端的HTTPS请求误判为HTTP请求:
- 浏览器要求
SameSite=None的Cookie必须携带Secure属性且仅在HTTPS请求下发送,Django误判协议后会导致会话Cookie被浏览器拦截,出现会话时好时坏的问题 - 修复Nginx配置,在
location /块中新增协议与端口传递头:
location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 新增以下两行 proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; }
- 在Django
settings.py中新增协议识别配置:
USE_X_FORWARDED_HOST = True SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
2. 修正Admin登录路径配置
当前使用相对路径../../login/auth0配置登录跳转地址,在不同层级的Admin页面下会出现路径解析错误,替换为绝对路径的命名URL配置:
from django.urls import reverse_lazy admin.autodiscover() # 替换原有相对路径配置 admin.site.login = login_required(admin.site.login, login_url=reverse_lazy('social:begin', args=['auth0']))
3. 检查会话存储与部署配置
你提到的「连续点击3-4次正常,换链接又失效」的表现高度匹配多实例部署下会话不共享的问题:
- 若开发环境ECS是多实例部署,且使用了Django默认的本地文件会话存储,请求轮询到未存储当前用户会话的实例时,就会被判定为未登录触发重定向,只有轮询到对应实例时才正常
- 解决方案:统一使用Redis、数据库等共享会话存储替换默认本地会话,也可临时开启负载均衡的会话粘性验证问题是否解决
内容的提问来源于stack exchange,提问作者Gedeon
相关产品推荐
相关产品推荐

