Переслать http на https в Azure

У нас есть развертывание на Azure с веб-ролью, которая использует https. Поскольку это единственный способ, которым мы хотим, чтобы наши пользователи обращались к системе, мы хотим перенаправить пользователей, которые посещают http-версию до версии https.

Мы пробовали рекомендации здесь.

А именно, мы добавили следующее к нашему web.config:

<system.webServer>
<rewrite>
  <rules>
    <rule name="HTTP to HTTPS redirect" stopProcessing="true">
      <match url="(.*)" />
      <conditions>
        <add input="{HTTPS}" pattern="off" ignoreCase="true" />
      </conditions>
      <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
    </rule>
  </rules>
</rewrite>

Однако это не работает. Кто-нибудь знает, как это сделать? Похоже, что это будет общий запрос...

Ответы

Ответ 1

Smarx только что опубликовал сообщение в блоге об этом еще пару минут;)

http://blog.smarx.com/posts/redirecting-to-https-in-windows-azure-two-methods

В случае, если сайт идет вниз, это резюме:

Переписывание URL-адреса IIS

Если вы не используете ASP.NET MVC, но используете IIS (как в веб-роли), вы можете использовать URL-адрес Rewrite-модуля, который установлен по умолчанию, Использование этого модуля для перенаправления на HTTPS довольно тривиально и документировано в другом месте, но все, чтобы все правильно работать в локальном вычислительном эмуляторе, является нетривиальным. В частности, большинство примеров, которые вы найдете, предполагают, что HTTP-трафик всегда будет на порту 80, что не всегда бывает при тестировании под эмулятором вычислений. Это правило, которое работает локально и в облаке:

<system.webServer>
  <rewrite>
    <rules>
      <rule name="Redirect to HTTPS">
        <match url="(.*)" />
        <conditions>
          <add input="{HTTPS}" pattern="off" ignoreCase="true" />
          <add input="{URL}" pattern="/$" negate="true" />
          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        </conditions>
        <action type="Redirect" url="https://{SERVER_NAME}/{R:1}" redirectType="SeeOther" />
      </rule>
    </rules>
  </rewrite>

Ответ 2

Просто добавив к Кевину Клоуту ответ на блог Smarx. Чтобы установить атрибут RequireHttps только в режиме деблокирования, вы можете использовать HttpContext.Current.IsDebuggingEnabled

    public static void RegisterGlobalFilters(GlobalFilterCollection filters) {

        if (!HttpContext.Current.IsDebuggingEnabled) {
            filters.Add(new RequireHttpsAttribute());
        }
    }

Пожалуйста, обратитесь к этой ссылке: fooobar.com/questions/49259/...

Ответ 3

Добавление к ответам, уже упомянутым здесь. Это очевидно, когда вы думаете об этом, но не для меня, когда я впервые прочитал этот пост.

Вам нужно убедиться, что вы открываете порт 80 и привязываете его к своему сайту через ваш файл ServiceDefinition, чтобы это работало.

Пример записей выглядит так:

   <Sites>
      <Site name="Web" physicalDirectory=".\SitesRoot">
        <VirtualDirectory name="www" physicalDirectory=".\SitesRoot\dist" />
        <Bindings>
          <Binding name="HttpsEndpoint" endpointName="HttpsEndpoint" />
          <Binding name="HttpEndpoint" endpointName="HttpEndpoint" />
        </Bindings>
      </Site>
    </Sites>

    <Endpoints>
      <InputEndpoint name="HttpsEndpoint" protocol="https" port="443" certificate="MY_SSL_CERT.pfx" />
      <InputEndpoint name="HttpEndpoint" protocol="http" port="80" />
    </Endpoints>

Ответ 4

Самый простой способ сделать это - установить расширение перенаправления HTTP на HTTPS.

Чтобы установить его, откройте веб-приложение из панели управления и нажмите вкладку "Расширения".

Найдите Redirect HTTP to HTTPS и установите его.

Что это. Нет настроек или сложных конфигурационных инструкций