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

部署Linux服务器后DRF无法获取请求头中Authorization令牌

解决DRF部署Linux后无法获取Authorization请求头的问题
  • 检查反向代理服务器配置(最常见原因)
    如果你用Nginx作为反向代理,默认情况下Nginx不会自动传递Authorization请求头到后端Django服务。需要在Nginx的server配置块里添加以下关键配置:

    location / {
        proxy_pass http://你的Django服务地址;
        # 传递Authorization请求头到后端
        proxy_set_header Authorization $http_authorization;
        # 同时保留其他必要请求头
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    

    修改完成后重启Nginx生效:sudo systemctl restart nginx

  • 改用Django标准的请求头获取方式
    Django会将HTTP请求头转换为META字典的键,规则是前缀HTTP_+大写头名称(横杠替换为下划线)。比如Authorization对应request.META.get('HTTP_AUTHORIZATION'),可以替换代码里的获取逻辑,避免代理环境下的兼容问题。

  • 验证Django中间件配置
    确保django.middleware.common.CommonMiddleware在settings.py的MIDDLEWARE列表中,这个中间件负责处理请求头的格式转换。同时排查自定义中间件,确认没有逻辑修改或丢弃了Authorization头。

  • 检查DRF认证配置
    确认settings.py的REST_FRAMEWORK配置中包含了你使用的认证类,比如TokenAuthentication:

    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': [
            'rest_framework.authentication.TokenAuthentication',
            # 其他需要的认证类
        ]
    }
    
  • 排查服务器安全策略
    检查Linux服务器的防火墙(如iptables、ufw)或云服务商安全组,确认没有拦截携带Authorization头的请求(此情况概率较低,优先排查前面的配置)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:46:00