Какой самый эффективный способ маршрутизации к большому двоичному объекту Azure?

Если у меня есть общедоступный файл Azure Blob, например. https://mystorage.blob.core.windows.net/myblobcontainer/myblobpage.html

Какие у меня есть варианты, если я хочу перейти на эту страницу со своего домена? например если я хочу направить mydomain.com/foo/blobpage на указанный выше URL.

Я знаю, что это можно сделать с помощью Web.confg на Azure WebSites или CloudServices. Как описано здесь Скрыть URL-адрес большого двоичного объекта Azure.

Есть ли другие варианты? может полегче? Я предполагаю, что использование конфигурации на веб-сайте Azure будет сопряжено с некоторыми накладными расходами и, возможно, какой-либо прокси-сервер nginx или что-то еще может быть более эффективным. Итак, каковы альтернативы и как они будут сравниваться с точки зрения масштабируемости с маршрутизацией веб-конфигурации?


person Roger Johansson    schedule 25.12.2015    source источник


Ответы (3)


Сегодня с помощью учетной записи хранения Azure вы можете настроить собственное доменное имя. Инструкции см. на странице https://azure.microsoft.com/en-us/documentation/articles/storage-custom-domain-name/

Кроме того, если причиной запроса является то, что веб-браузер из-за ошибки «Политика того же происхождения», вы можете просто установить роли CORS для большого двоичного объекта: https://msdn.microsoft.com/en-us/library/azure/dn535601.aspx

person Rachel Yehezkel    schedule 27.12.2015

В вашем файле конфигурации по умолчанию или в файле конфигурации сайта. укажите URL-адрес контейнера больших двоичных объектов как proxy_pass и установите базовый URL-адрес вашего контейнера как proxy_set_header Host

location /images {
        proxy_pass https://YOURACCOUNT.blob.core.windows.net/images;
        proxy_set_header Host YOURACCOUNT.blob.core.windows.net;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_cache_bypass $http_upgrade;
}
person Sathish Kumar    schedule 15.12.2018

Одним из вариантов, который я бы рассмотрел, будет использование HttpHandlers.

Вот пример обработчика, который может делать то же самое:

using System;
using System.Web;
using Microsoft.WindowsAzure.StorageClient;
using Microsoft.WindowsAzure;

namespace WebApplication2
{
  public class BlobProxy : IHttpHandler
  {
    // Please replace this with your blob container name.
    const string blobContainerName = "files";

    public bool IsReusable
    {
      get { return false; }
    }

    public void ProcessRequest(HttpContext context)
    {
      // Get the file name.
      string fileName = context.Request.Path.Replace("/blobproxy/", string.Empty);

      // Get the blob from blob storage.
      var storageAccount = CloudStorageAccount.DevelopmentStorageAccount;
      var blobStorage = storageAccount.CreateCloudBlobClient();
      string blobAddress = blobContainerName + "/" + fileName;
      CloudBlob blob = blobStorage.GetBlobReference(blobAddress);

      // Read blob content to response.
      context.Response.Clear();
      try
      {
        blob.FetchAttributes();

        context.Response.ContentType = blob.Properties.ContentType;
        blob.DownloadToStream(context.Response.OutputStream);
      }
      catch (Exception ex)
      {
        context.Response.Write(ex.ToString());
      }
      context.Response.End();
    }
  }
}

И вот конфигурация, которая вам нужна для внедрения вашего обработчика Http:

<configuration>
  <system.webServer>
    <handlers>
      <add name="BlobProxy" verb="*" path="/blobproxy/*" type="WebApplication2.BlobProxy"/>
    </handlers>
  </system.webServer>
</configuration>
person Aram    schedule 26.12.2015