Переслать 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
и установите его.
Что это. Нет настроек или сложных конфигурационных инструкций