服务器迁移后Laravel API后续请求认证失败问题排查
问题:Laravel API迁移GoDaddy服务器后Bearer认证失败(401)
我有一个部署在GoDaddy服务器上的Laravel API,迁移到更小规格的服务器后,首次认证请求能正常完成无报错,但携带API Token发起后续请求时,Laravel会抛出AuthenticationException并返回401未授权错误。
认证请求
POST https://example.com/api/v1/authenticate BODY {"api_token":"lKqsFGhhMfKFtly9Y2HJOiDOr1Gnu2eERbQlsPXXjZwZb1RZ"}
认证响应
{ "meta": { "status": 200, "success": true, "results": 0, "endpoint": "https://example.com/api/v1/authenticate" }, "data": { "player": { "id": 667, "username": "myusername", "email": "user@example.com", "is_logged_id": 1, "api_token": "lKqsFGhhMfKFtly9Y2HJOiDOr1Gnu2eERbQlsPXXjZwZb1RZ" } } }
带认证信息的API请求
curl --location 'https://example.com/api/v1/categories' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer lKqsFGhhMfKtr9f0zB4szYiFtly9Y2HJOiDOr1Gnu2eERbQlsPXXjZwZb1RZ' \ --header 'Cookie: XSRF-TOKEN=eyJpdiI6ImQwVk5TdkYwUTFtU25qb3RLYmR3dXc9PSIsInZhbHVlIjoiMi9tUWdWUDFjK0ozQVlNMzBQTVdJUmdaT2pjOCt3akMzZ0t5Z1huUlB0ekI1Q0drYlY0WEpvWkk3MlJWcVVrTVZ0SXdwRW14NnpCb2RMTDZMV1ZGa3crMmdJbXhZeU1GUGcrN1JBMytzQitEWWlkNzNqVWVUMTVoSkw0Z1BSOGsiLCJtYWMiOiIzN2ZkNWEzMjQxNmI3MTBiNjRhN2EzOGFhZTEzN2FkOTY0OTY0NTQ3NmE4YjU1NWQ0NDE4NjAzYTg3MzYzN2E1IiwidGFnIjoiIn0%3D'
带认证信息的API响应及请求头
Symfony\Component\HttpFoundation\HeaderBag {#39 // app/Exceptions/Handler.php:15 #headers: array:8 [ "accept" => array:1 [ 0 => "application/json" ] "user-agent" => array:1 [ 0 => "PostmanRuntime/7.37.0" ] "cache-control" => array:1 [ 0 => "no-cache" ] "postman-token" => array:1 [ 0 => "66cf99ea-91d9-4855-8ab7-901d0c75ad90" ] "host" => array:1 [ 0 => "example.com" ] "accept-encoding" => array:1 [ 0 => "gzip, deflate, br" ] "connection" => array:1 [ 0 => "keep-alive" ] "x-https" => array:1 [ 0 => "1" ] ] #cacheControl: array:1 [ "no-cache" => true ] }
{ "error": "Unauthenticated." }
本地环境运行相同API无此问题,将服务器上的API下载后用php artisan serve运行也正常,已执行composer install无报错,请问是否遗漏了服务器端配置?
排查方向
- Web服务器请求头传递问题:
- Apache:确认
mod_rewrite已启用,且.htaccess文件添加规则强制传递Authorization头:RewriteEngine On RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] - Nginx:在站点配置中添加
proxy_set_header Authorization $http_authorization;,避免Token请求头被丢弃。
- Apache:确认
- PHP配置限制:检查服务器
php.ini的variables_order配置,确保包含E(环境变量),否则Laravel无法读取$_SERVER['HTTP_AUTHORIZATION']。 - GoDaddy特殊安全规则:部分GoDaddy共享主机会过滤特殊请求头,可联系服务商确认是否有相关限制,或尝试在
.htaccess中添加上述规则绕过滤。 - 缓存清理:执行
php artisan config:clear和php artisan cache:clear清除服务器端配置缓存,确保Laravel加载最新认证逻辑。 - 请求头长度限制:若API Token过长,可能被Web服务器截断,可尝试缩短Token测试,或调整服务器的请求头长度限制(如Nginx的
large_client_header_buffers)。
内容的提问来源于stack exchange,提问作者Ciara K.
相关产品推荐
相关产品推荐

