在Azure中将http转发到https

时间:2011-08-10 20:56:05

标签: azure

我们在Azure上部署了一个使用https的Web角色。由于这是我们希望用户访问系统的唯一方式,因此我们希望将访问http版本的用户转发到https版本。

我们尝试了here建议。

即,我们在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>

但是,这似乎不起作用。有谁知道如何做到这一点?这似乎是一个共同的要求......

4 个答案:

答案 0 :(得分:22)

Smarx刚刚再发一篇关于此事的博客文章;)

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

如果网站出现故障,请点击摘要:

IIS网址重写

如果您不使用ASP.NET MVC但使用IIS(如在Web角色中),则可以使用默认安装的URL Rewrite module。使用此模块重定向到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>

答案 1 :(得分:6)

刚刚加入Kevin Cloet对Smarx博客的回答。要仅在发布模式下设置RequireHttps属性, 你可以使用HttpContext.Current.IsDebuggingEnabled

    public static void RegisterGlobalFilters(GlobalFilterCollection filters) {

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

请参阅此链接: https://stackoverflow.com/a/27324439/1933168

答案 2 :(得分: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>

答案 3 :(得分:2)

最简单的方法是安装Redirect HTTP to HTTPS扩展程序。

要安装它,请从仪表板打开Web App,然后单击Extensions选项卡。

搜索Redirect HTTP to HTTPS并安装。

那就是它。没有设置或复杂的配置说明