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

Laravel应用使用JWT时Authorization头无法传递的异常问题

嘿,这个问题我之前也碰到过!先给你吃个定心丸:Laravel本身默认是不会过滤Authorization请求头的,大概率是服务器配置、代理或者中间件的锅,下面给你梳理几个最常见的排查方向:

1. Nginx(或其他Web服务器)的配置问题

很多时候是Nginx在CGI模式下默认丢弃了Authorization头——它不会自动把这个头传递给PHP-FPM。你需要修改Nginx的站点配置,在处理PHP请求的location块里添加一行:

fastcgi_param HTTP_AUTHORIZATION $http_authorization;

另外,如果你的服务器禁用了下划线请求头(虽然Authorization没有下划线,但以防万一有相关连带影响),可以在http或server块里加上:

underscores_in_headers on;

修改完记得重启Nginx生效。

2. 反向代理下的TrustProxies中间件问题

如果你的Laravel应用部署在反向代理(比如Nginx、Cloudflare、负载均衡)后面,Laravel可能无法正确获取到原始的Authorization头——因为代理会重写请求头。这时候需要调整App\Http\Middleware\TrustProxies中间件:

// 在TrustProxies.php文件中
protected $proxies = '*'; // 测试环境可以临时用这个,生产环境建议指定具体的代理IP
protected $headers = Request::HEADER_X_FORWARDED_ALL;

这样Laravel就会信任代理传递过来的请求头了。

3. 自定义/第三方中间件的干扰

检查一下你项目里的全局中间件或者路由中间件,有没有哪个中间件在处理请求时不小心移除了Authorization头?比如有些开发者会在中间件里做请求头清理,可能误删了它。你可以临时注释掉一些非必要的中间件,测试请求是否正常,逐步排查出问题所在。

4. 跨域(CORS)配置遗漏

如果是前端跨域请求,浏览器会先发送OPTIONS预检请求,这时候需要确保你的CORS配置允许Authorization头。如果你用的是barryvdh/laravel-cors包,在config/cors.php里要把Authorization加到allowed_headers数组里:

'allowed_headers' => ['Content-Type', 'Authorization'],

同时确保supports_credentials设置为true(如果请求需要带凭证的话)。

按照这个顺序排查下来,大概率能找到问题根源——先从服务器配置入手,这是最常见的原因!

内容的提问来源于stack exchange,提问作者the inquisitor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:29:12