Azure 存储 Blob:https://(storageAccountName).blob.core.windows.net/vhd?restype=container&comp=list

Posted

技术标签:

【中文标题】Azure 存储 Blob:https://(storageAccountName).blob.core.windows.net/vhd?restype=container&comp=list 无法使用代理【英文标题】:Azure Storage Blob : https://(storageAccountName).blob.core.windows.net/vhd?restype=container&comp=list not working using proxy 【发布时间】:2016-11-06 18:38:36 【问题描述】:

为了获取 blob 容器详细信息,我们使用下面提到的 REST API。 Vhd 是 blob 容器名称。

https://(storageAccountName).blob.core.windows.net/vhd?restype=container&comp=list

当我们使用代理服务器详细信息(例如:SQUID Proxy)访问存储 REST API 调用时,我们会收到以下错误。

Blob 的 HttpResponse:: ResourceNotFoundThe 指定的资源不存在。 RequestId:6dc7e6f2-0001-000d-30f9-d56eb3000xxx

如果我们在没有代理服务器的情况下访问相同的 rest api,我们会得到有效的响应并且它正在工作。

【问题讨论】:

根据您的问题,代理似乎是重要的部分。而且您没有提供所述代理的任何详细信息。这似乎也更适合 ServerFault 与 ***,因为它与基础架构相关(但同样,如果没有代理或任何网络捕获的其他详细信息,很难分辨)。 您使用什么编程语言(C#、php 等)?我的猜测是您需要在某处指定代理设置,但答案取决于您的执行环境。 我们正在使用 java 并且代理设置是有效的,它适用于其他 REST API。我们用于获取存储帐户的 REST API,存储密钥与代理服务器一起使用。鱿鱼代理就像(10.10.10.10)通过代理访问传递所有请求。 请对此进行更新。 【参考方案1】:

根据我的经验,通常使用 squid 作为后端服务的反向代理,但在这里您希望通过 squid 作为正向代理访问存储 REST API。您可以参考维基页面https://en.wikipedia.org/wiki/Proxy_server、SO 线程Difference between proxy server and reverse proxy server 和blog 了解两者之间的区别。

所以这个问题的解决方案是将代理服务器配置为转发代理。

    对于 Squid,您可以尝试参考 squid wiki 页面 http://wiki.squid-cache.org/SquidFaq/ConfiguringSquid 和 http://wiki.squid-cache.org/Features/HTTPS 了解如何使用 HTTPS 配置为正向代理。

    对于Apache,可以尝试参考apache doc页面http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#forwardreverse来做。

然后,设置 Java 的系统属性以在设置转发代理成功后启用代理支持。

有两种方式支持 Java 的代理。

    命令行 JVM 设置:代理设置通过命令行参数提供给 JVM:

    java -Dhttp.proxyHost=proxyhostURL -Dhttp.proxyPort=proxyPortNumber -Dhttp.proxyUser=someUserName -Dhttp.proxyPassword=somePassword HelloWorldClass
    

    在代码中设置系统属性:在 Java 代码中添加以下行,以便 JVM 使用代理进行 HTTP 调用。

    System.setProperty("http.proxyPort", "someProxyPort");
    System.setProperty("http.proxyUser", "someUserName");
    System.setProperty("http.proxyPassword", "somePassword");
    System.setProperty("http.proxyHost", "someProxyURL");
    

有关 Java 中的网络、代理和属性的更多信息,请参阅 http://docs.oracle.com/javase/7/docs/technotes/guides/net/proxies.html 和 http://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html。

【讨论】:

【参考方案2】:

我们找到了解决方案。问题是我们一次为所有存储帐户调用异步调用。例如:如果我们有 5 个存储帐户,每个存储帐户有 5 个 vhd 容器,并且在 for 循环中,如果我们同时调用所有 5 个并且回调等待 5 个响应,在这种情况下它不起作用。所以我们分别调用每个调用并开始工作。

【讨论】:

以上是关于Azure 存储 Blob:https://(storageAccountName).blob.core.windows.net/vhd?restype=container&comp=list的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript Azure Blob 存储移动 blob

Azure Blob - 直接存储到存档层

Azure Blob 存储生命周期管理

Azure 存储 Blob CORS 错误

azcopy 版本 10.x 不适用于 Azure 存储表的源和 Azure 存储 Blob 容器的目标

列出存储容器内容时获取 Azure 存储以返回 blob URL