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::
ResourceNotFound
The 指定的资源不存在。 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