Question

Setting up Pre-Signed urls with custom domain name and CDN in PHP

Posted October 26, 2021 130 views
PHPCDNDigitalOcean Spaces

Been seeing a few questions surrounding this issue and it seems like the tutorials for this aren’t very clear.

I followed the guide here

So I have a few questions since this is not working:

1) For a CDN, which endpoint do I use exactly? I see 4 possible endpoints and the language is confusing as to which one to use:

  • Endpoint: sfo3.digitaloceanspaces.com
  • Origin: xxxx
  • Edge: xxxx
  • Subdomain: xxxx

2) When I use the PHP code example, I get back the wrong path. It adds the bucket name into the path. For example:

$cmd = $client->getCommand('GetObject', [
    'Bucket' => 'example-space-name',
    'Key'    => 'path/to/file.ext'
]);

$request = $client->createPresignedRequest($cmd, '+5 minutes');
$presignedUrl = (string) $request->getUri();

echo $presignedUrl."\n";

// https://mycdn.website.com/example-space-name/path/to/file.ext

That path is incorrect I believe. It should be:

https://mycdn.website.com/path/to/file.ext

When I was testing with the endpoint values, I was getting a mix of XML error responses. Either AccessDenied or SignatureMismatch.

One last thing, I noticed this text in regards to using a CDN:

You can use presigned URLs with the Spaces CDN. To do so, configure your SDK or S3 tool to use the non-CDN endpoint, generate a presigned URL for a GetObject request, then modify the hostname in the URL to be the CDN hostname (<space-name>.<region>.cdn.digitaloceanspaces.com, unless the Space uses a custom hostname).

I don’t see a code example for this case in PHP or any of the other languages.

Where am I going wrong here?

Submit an answer

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!