如何在CloudFront上为网页创建签名网址以及其他CSS / JS文件的链接?

时间:2017-11-17 02:48:58

标签: amazon-web-services amazon-s3 amazon-cloudfront

我使用cloudfront为我的网页创建了签名网址,如下所示:

https://abcXXX.cloudfront.net/index.html?Expires=1510886661&Signature=XXX&Key-Pair-Id=XXX

此网页存储在Amazon S3上。

虽然网页本身加载正常,但问题是它链接到许多其他文件,如CSS和JS文件。

e.g。请考虑以下HTML文档:

<html>
    <head>
        <script src="js/foo.js"/>
    </head>   
    <body>

    </body>
</html>

这意味着我在控制台中获得了以下许多内容:

Failed to load resource: the server responded with a status of 403 ()

显而易见的解决方案是设置cookie。所以我做了以下事情:

$sdk = new Aws\Sdk( [
    'region' => 'eu-west-2',
    'version' => 'latest',
] );
$cloudFront = $sdk->createCloudFront();
$domain = "xxx.cloudfront.net";
$resourceKey = "https://{$domain}/index.html";

$signedCookieCannedPolicy = $cloudFront->getSignedCookie([
    'url'         => $resourceKey,
    'expires'     => time() + 60,
    'private_key' => 'private.pem',
    'key_pair_id' => 'XXX'
]);

foreach ($signedCookieCannedPolicy as $name => $value) {
    setcookie($name, $value, 0, "", $domain, true, true);
}
wp_redirect( $resourceKey ); // wordpress redirect
die();

但是,重定向后,我得到了:

<Error>
    <Code>MissingKey</Code>
    <Message>
        Missing Key-Pair-Id query parameter or cookie value
    </Message>
</Error>

检查饼干时,似乎从未过去。这可能是因为我认为您无法将cookie从一个域(例如从https://mybookshop.com)设置到另一个域。

如何解决我的问题?

更新

我尝试手动添加cookie,虽然主index.html文件打开正常,但我现在在控制台上收到以下错误:

GET https://XXX.cloudfront.net/css/ereader.css net::ERR_ABORTED

0 个答案:

没有答案