Endpoint写错会导致签名验证失败而非连接超时;必须使用带https://协议的地域域名(如https://oss-cn-hangzhou.aliyuncs.com),禁用自定义域名和内网域名,且.env中需完整配置协议。

在Yii2项目中配置阿里云OSS上传时,Endpoint写错会导致签名验证失败而非连接超时,服务端直接拒绝请求,前端报错无明确提示,排查耗时往往超过30分钟。
OSS Endpoint必须带协议且仅认地域域名
第一步:登录阿里云OSS控制台 → 存储空间 → 概览 → 访问域名,复制形如 【https://oss-cn-hangzhou.aliyuncs.com】 的地址。
第二步:打开 config/filesystems.php,在 oss 磁盘配置中填入该地址,注意必须完整包含 https:// 前缀。缺协议或写成 oss-cn-hangzhou.aliyuncs.com 会导致 SDK 签名计算错误,OSS 服务端校验不通过。
第三步:绝对不要使用 Bucket 绑定的自定义域名(例如 https://static.example.com)或内网域名(例如 https://oss-cn-hangzhou-internal.aliyuncs.com)。前者不参与签名计算,后者本地开发根本连不通——ECS 同地域才可用。
Yii2中配置OSS磁盘的实操步骤
方法一:直接在 config/filesystems.php 中声明 oss 磁盘
在 'disks' => [ ... ] 数组里添加:
'oss' => [ 'driver' => 'oss', 'access_key' => env('ALIYUN_OSS_ACCESS_KEY_ID'), 'secret_key' => env('ALIYUN_OSS_ACCESS_KEY_SECRET'), 'bucket' => env('ALIYUN_OSS_BUCKET'), 'endpoint' => env('ALIYUN_OSS_ENDPOINT'), // 必须是 https://oss-cn-hangzhou.aliyuncs.com 这种格式 'region' => '', // 此项可留空,SDK 会从 endpoint 自动解析 ]
注意:.env 文件中 ALIYUN_OSS_ENDPOINT=https://oss-cn-hangzhou.aliyuncs.com 必须带协议,否则 env() 取出后仍是无效值。
验证Endpoint是否生效的最快方式
在任意控制器中执行以下代码:
$disk = Yii::$app->getStorage()->getDisk('oss'); var_dump($disk->getClient()->getEndpoint());
如果输出结果是 https://oss-cn-hangzhou.aliyuncs.com(含 https),说明配置已加载成功;若输出为 oss-cn-hangzhou.aliyuncs.com 或空字符串,说明环境变量未生效或 config 中写错位置。
这一步操作起来很简单,直接把 var_dump 放进 action 就能立刻看到结果,不用等上传失败再回头查。


















