Laravel生产服务器中如何获取自定义Postman请求头company_code
解决Laravel生产环境无法获取自定义请求头的问题
1. 排查Web服务器配置(核心原因)
生产环境的Web服务器(Nginx/Apache)通常会过滤或修改自定义请求头,这是最常见的问题根源:
Nginx 调整
- 开启下划线请求头支持:在Nginx的server配置块中添加
underscores_in_headers on;
- 确保请求头传递给PHP-FPM:在
fastcgi_params文件或server块中添加
fastcgi_param HTTP_COMPANY_CODE $http_company_code;
修改后重启Nginx服务。
Apache 调整
- 启用
mod_headers模块,然后在.htaccess或虚拟主机配置中添加规则,确保自定义头被传递:
SetEnvIfNoCase ^Company-Code$ "(.+)" HTTP_COMPANY_CODE=$1
同时检查是否存在Header unset company_code这类移除头的规则,如有则删除。
2. Laravel端正确获取请求头
不要用配置文件存储动态请求头(配置是静态的,无法随请求变化),直接从请求对象获取:
// 中间件中获取方式1 $companyCode = $request->header('company_code'); // 方式2:用服务器全局变量(注意大写,下划线转HTTP_前缀) $companyCode = $_SERVER['HTTP_COMPANY_CODE'] ?? null; // 如果Web服务器自动把下划线转成连字符,尝试这个 $companyCode = $request->header('company-code');
3. 验证请求是否真的到达服务器
先通过curl模拟请求,确认头信息能被服务器接收:
curl -H "company_code: test123" https://你的生产域名/测试接口路径
再在Laravel中写个临时测试接口,输出所有请求头:
Route::get('/check-headers', function(\Illuminate\Http\Request $request) { return response()->json($request->headers->all()); });
访问该接口,查看返回结果中是否存在company_code或对应的键。
4. 检查信任代理配置
如果生产环境使用了负载均衡/反向代理,需在config/trustedproxy.php中配置信任的代理IP:
'proxies' => [ '10.0.0.1', // 替换为你的代理服务器IP ], 'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_ALL,
或在.env中临时设置(仅限信任环境):
TRUSTED_PROXIES=*
内容的提问来源于stack exchange,提问作者Mahesh
相关产品推荐
相关产品推荐

