我如何在 softlayer 的 "standalone cdn + object storage" 上缓存清除?

how can i cache purge on softlayer's "standalone cdn + object storage"?

我们正在使用 softlayer 的 "standalone cdn + object storage" 并尝试清除像

这样的 url 的缓存

HTTP URL

http:// 000aa.http.cdn.softlayer.net/00000AA/tok02/v1/AUTH_secretsecretsecretsecretsecretsecret/web/test.txt

HTTPS URL

https:// 000aa.https.cdn.softlayer.net/00000AA/tok02/v1/AUTH_secretsecretsecretsecretsecretsecret/web/test.txt

使用写在

上的方法

参考资料 http://sldn.softlayer.com/reference/services/SoftLayer_Network_ContentDelivery_Account/purgeCache

但是缓存清除不起作用。 我如何在 softlayer 的 "standalone cdn + object storage" 上缓存清除? 以下是我们的代码和错误。

--------------------------------------------------------------------------------
softlayer-api-php-client
--------------------------------------------------------------------------------
■code
<?php
$apiUsername = 'SL0000000’;
$apiKey = '0000000000000000000000000000000000000000000000000000000000000000';
$client = SoftLayer\SoapClient::getClient('SoftLayer_Network_ContentDelivery_Account', null, $apiUsername, $apiKey);
$client->purgeCache( array( 'http:// 000aa.http.cdn.softlayer.net/00000AA/tok02/v1/AUTH_secretsecretsecretsecretsecretsecret/web/test.txt' ) );
exit;

■error
PHP Fatal error:  Uncaught SoapFault exception: [SoftLayer_Exception] Object does not exist to execute method on. (SoftLayer_Network_ContentDelivery_Account::purgeCache) in /softlayer-api-php-client-master/src/SoapClient.php:202
Stack trace:
#0 /softlayer-api-php-client-master/src/SoapClient.php(202): SoapClient->__call('purgeCache', Array, NULL, Array, Array)
#1 /softlayer-api-php-client-master/example.php(80): SoftLayer\SoapClient->__call('purgeCache', Array)
#2 /softlayer-api-php-client-master/example.php(80): SoftLayer\SoapClient->purgeCache(Array)
#3 {main}




--------------------------------------------------------------------------------
softlayer-object-storage-php
--------------------------------------------------------------------------------
■code
$options = array('adapter' => ObjectStorage_Http_Client::SOCKET, 'timeout' => 10);
$host = 'https://tok02.objectstorage.softlayer.net';
$username = 'SLOS0000000-0:SL0000000’;
$password = '0000000000000000000000000000000000000000000000000000000000000000';
$objectStorage = new ObjectStorage( $host, $username, $password, $options);
$objectStorage->with('web/test.txt')->purgeCache();

■error
[17-Apr-2017 18:24:04 Asia/Tokyo] PHP Fatal error:  Uncaught exception 'ObjectStorage_Exception_Http_MethodNotAllowed' with message 'Failed to save ObjectStorage Object. 'NoneType' object has no attribute 'get'' in /softlayer-object-storage-php-master/lib/ObjectStorage.php:589
Stack trace:
#0 /softlayer-object-storage-php-master/lib/ObjectStorage.php(589): ObjectStorage_Exception_Http::factory('Failed to save ...', 405)
#1 /softlayer-object-storage-php-master/lib/ObjectStorage/Object.php(71): ObjectStorage->update(Object(ObjectStorage_Object))
#2 /softlayer-object-storage-php-master/example.php(91): ObjectStorage_Object->purgeCache()
#3 {main}
  thrown in /softlayer-object-storage-php-master/lib/ObjectStorage.php on line 589

方法 SoftLayer_Network_ContentDelivery_Account::purgeCache 适用于通过产品订单流程创建的 CDN 对象。正如您在文档中看到的那样,此方法需要一个 InitParameter,它是 CDN id 和要清除缓存的 URL。

错误"Object does not exist to execute method on"是因为您没有在

中指定CDN id
$client = SoftLayer\SoapClient::getClient('SoftLayer_Network_ContentDelivery_Account', [ID], $apiUsername, $apiKey);

如果您订购了 CDN,您应该可以通过页面 https://control.softlayer.com/storage/cdn or by calling the method SoftLayer_Account::getCdnAccounts. If this is your case, you can create a "origin pull mapping" by using the method SoftLayer_Network_ContentDelivery_Account::createOriginPullMapping. After that, you should be able to use purgeCache 方法看到它,使用您在 createOriginPullMapping 期间输入的 CNAME。

我无法重现您提供的第二个 PHP 代码中描述的错误。代码很好,我能够使用相同的代码制作 purgeCache,但我注意到以下内容:

以下行代码的结果为真:

$result = $objectStorage->with('/web/test.txt')->get()->purgeCache();

$result = $objectStorage->with('/web/test.txt')->purgeCache(); 

$result = $objectStorage->with('/web/test456465.txt')->purgeCache();       

最后一个问题,“/web/test456465.txt”不存在但结果为真。在 purgeCache.

之前添加方法 get 时为 FALSE

错误可能与 get 方法有关,因为它说: 'NoneType'对象没有属性'get'

我建议在 purgeCache 之前添加 get 方法以验证对象是否存在,您也可以使用以下方法验证它线路代码:

$result = $objectStorage->with('/web/test.txt')->get()->getPath();
print $result;

如果打印'/web/test.txt',则表示该对象存在。

如果错误"Failed to save ObjectStorage Object"仍然存在,您可以换个位置试试。

您也可以手动清除缓存,如下所示:

提出POST请求如下:

POST: https://000aa.https.cdn.softlayer.net/00000AA/tok02/v1/AUTH_secretsecretsecretsecretsecretsecret/web/test.txt

Headers:
X-Context: cdn
X-Auth-Token: AUTH_tka456546546546545
X-Cdn-Purge: true

其中“AUTH_tka456546546546545”是你在使用CURL时应该得到的X-Auth-Token。参见

参考文献:

https://sldn.softlayer.com/reference/Object-Storage-CDN

http://sldn.softlayer.com/blog/waelriac/managing-softlayer-object-storage-through-rest-apis

https://sldn.softlayer.com/node/272962

https://sldn.softlayer.com/taxonomy/term/61

https://github.com/softlayer/softlayer-object-storage-php

希望对你有所帮助。

此致。