部署Linux服务器后DRF无法获取请求头中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
相关产品推荐
相关产品推荐

