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

Plesk上部署的Laravel能否跨域名调用其他站点文件返回响应?

问题解决步骤

1. 先验证open_basedir配置是否真的生效

很多时候修改Plesk配置后未生效是配置不对或者没重启服务:

  • 在客户端站点根目录创建临时文件phpinfo.php,写入内容<?php phpinfo(); ?>
  • 访问该文件,搜索open_basedir字段,确认管理端站点的存储目录已经被加入允许列表
  • 注意:Plesk修改配置要选对客户端站点的PHP设置项,修改完成后点击应用,若站点使用PHP-FPM模式,需要重启对应PHP版本的FPM服务才会生效,同时要确认路径拼写完全正确,Linux系统路径大小写敏感,差一个字符都不会匹配。

2. 检查文件系统权限

open_basedir仅限制PHP的路径访问范围,就算放开限制,客户端站点的运行用户没有管理端文件的读权限依然会报错:
Plesk每个站点默认分配独立的系统运行用户,所有站点用户默认归属psacln用户组,你可以在Plesk文件管理器中找到管理端站点的storage/app/public目录,右键打开权限设置,给psacln组增加读、执行权限,勾选递归应用到所有子目录和文件即可,这个方案不会对外开放额外权限,安全性较高。

3. 更安全的替代方案(无需修改服务端配置)

不想改服务配置的话可以绕过本地文件读取,改用HTTP拉取管理端文件:

  • 在管理端站点开发一个带签名校验的PDF读取接口,避免未授权访问
  • 客户端站点通过HTTP请求拉取PDF内容后输出给用户,代码示例:
// 客户端站点代码
$pdfContent = Http::get('https://你的管理端域名/api/get-pdf?sign=校验签名&file_id=文件ID')->body();
return response($pdfContent, 200, [
    'Content-Disposition' => 'inline; filename="'.$object->title.'.pdf',
    'Content-Type' => 'application/pdf'
]);

4. Storage::response不生效的问题

Laravel的Storage::response方法默认传参是相对于对应磁盘根目录的相对路径,不要传绝对路径,你可以在客户端站点的config/filesystems.php中新增一个指向管理端存储目录的磁盘配置:

// 新增磁盘配置
'disks' => [
    // 原有其他磁盘配置
    'admin_public' => [
        'driver' => 'local',
        'root' => '/var/www/vhosts/你的管理端域名/httpdocs/storage/app/public',
    ]
]

使用时调用对应磁盘即可:

return Storage::disk('admin_public')->response('myfile.pdf', $object->title.'.pdf', [
    'Content-Disposition' => 'inline'
]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:12:04