PHP(Laravel框架)下用AWS SDK生成带自定义域名的签名URL
使用自定义域名生成CloudFront签名URL(Laravel + AWS SDK)
嘿,其实这个需求改起来挺简单的,核心就是替换掉生成签名URL时依赖的资源域名就行,不过先得确认一个前提:你的自定义域名已经正确绑定到CloudFront分发上了——包括在CloudFront控制台配置了CNAME记录,并且用ACM(AWS Certificate Manager)申请了对应域名的SSL证书(确保HTTPS访问正常)。
接下来直接修改你的代码就行,具体步骤如下:
1. 替换资源URL的域名
把原来的CloudFront默认域名https://dbk93n3xxxxxx.cloudfront.net换成你的自定义域名,比如https://video.yourdomain.com(根据你的实际域名调整)。
2. 修改后的完整代码示例
use Carbon\Carbon; use Aws\CloudFront\CloudFrontClient; // 初始化CloudFront客户端(这部分和原来一致) $cloudFront = new CloudFrontClient([ 'region' => env('AWS_REGION'), 'version' => 'latest' ]); $path = "R180417XXXX.mp4"; // 这里换成你的自定义域名 $resourceURL = "https://video.yourdomain.com/" . $path; // 设置URL过期时间(5分钟后,和原来逻辑一致) $expires = Carbon::now()->addMinutes(5)->timestamp; // 生成签名URL(参数逻辑不变,确保私钥和密钥对ID正确) $signedUrlCannedPolicy = $cloudFront->getSignedUrl([ 'url' => $resourceURL, 'expires' => $expires, 'private_key' => base_path('pk-APKAI2PXXXXXXXXXXXXX.pem'), 'key_pair_id' => env('AWS_CLOUDFRONT_KEY_PAIR_ID') // 建议把密钥对ID存在.env里,更安全 ]);
几个关键注意事项
- 确保你的自定义域名已经在CloudFront分发的「Alternate domain names (CNAMEs)」里配置过,并且DNS服务商那边已经把该域名的CNAME记录指向CloudFront的默认域名。
- 签名用的密钥对(
private_key和key_pair_id)必须是CloudFront控制台里关联的密钥对,不然签名会无效。 - 如果你的自定义域名用了HTTPS,一定要确保在CloudFront分发里选择了对应的ACM证书(必须是在us-east-1区域申请的证书,哪怕你的分发在其他区域)。
内容的提问来源于stack exchange,提问作者baraear
相关产品推荐
相关产品推荐

