【问题标题】:Azure Storage Blob : https://(storageAccountName).blob.core.windows.net/vhd?restype=container&comp=list not working using proxyAzure 存储 Blob:https://(storageAccountName).blob.core.windows.net/vhd?restype=container&comp=list 无法使用代理
【发布时间】: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 与 StackOverflow,因为它与基础架构相关(但同样,如果没有代理或任何网络捕获的其他详细信息,很难分辨)。
  • 您使用什么编程语言(C#、PHP 等)?我的猜测是您需要在某处指定代理设置,但答案取决于您的执行环境。
  • 我们正在使用 java 并且代理设置是有效的,它适用于其他 REST API。我们用于获取存储帐户的 REST API,存储密钥与代理服务器一起使用。鱿鱼代理就像(10.10.10.10)通过代理访问传递所有请求。
  • 请对此进行更新。

标签: java azure azure-blob-storage


【解决方案1】:

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

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

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

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

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

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

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

    java -Dhttp.proxyHost=proxyhostURL -Dhttp.proxyPort=proxyPortNumber -Dhttp.proxyUser=someUserName -Dhttp.proxyPassword=somePassword HelloWorldClass
    
  2. 在代码中设置系统属性:在 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.htmlhttp://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-01
      • 2019-08-17
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 2013-03-02
      • 1970-01-01
      相关资源
      最近更新 更多