Laravel Livewire 3 负载均衡环境下文件上传失败问题
Livewire生产环境上传文件401异常解决方案
问题根源
生产环境通过HAProxy负载均衡时,/livewire/upload-file端点返回401 HttpException,异常触发自FileUploadController.php第21行的签名验证逻辑:
abort_unless(request()->hasValidSignature(), 401);
本地环境无负载均衡,请求签名验证可正常通过;但HAProxy转发请求时,可能修改了Host头、请求URL或未正确传递转发协议信息,导致签名验证失败。
解决步骤
配置HAProxy传递原始请求信息
在HAProxy配置文件中添加以下规则,确保后端服务器能获取到原始的请求Host和协议:option forwardfor reqadd X-Forwarded-Proto:\ https reqadd X-Forwarded-Host:\ %[req.hdr(Host)]这会保留客户端请求的原始Host头,并传递正确的请求协议(HTTP/HTTPS)。
让Laravel信任HAProxy代理
修改Laravel项目的config/trustedproxy.php文件,将HAProxy的IP地址加入信任代理列表:'proxies' => [ '10.0.0.5', // 替换为实际的HAProxy服务器IP ],若为安全的内部网络环境,也可设置为信任所有代理:
'proxies' => '*',此配置让Laravel认可HAProxy传递的
X-Forwarded-*头,保证签名生成与验证使用正确的请求参数。检查HAProxy的URL重写规则
确认HAProxy未对/livewire/upload-file相关请求的URL进行截断或重写,确保请求中的签名参数完整传递到后端。
内容的提问来源于stack exchange,提问作者Nebster
相关产品推荐
相关产品推荐

