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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:32:35