【问题标题】:Azure Cloud Service SSL redirect from Staging to Production slotAzure 云服务 SSL 从暂存槽重定向到生产槽
【发布时间】:2015-03-10 18:25:43
【问题描述】:

我已在我的云服务的生产槽上设置了 SSL。在我的 Web.Release.config 中,我有一个从 http 重定向到 https 的规则。我使用 Release 配置部署到登台,这样当我与生产交换时,重定向就会发生。但是,这会导致我的 staging 重定向到生产环境,这意味着我永远无法真正测试我的 staging 部署(基本上我可以测试重定向是否正在发生)。

我觉得这个设置是错误的。有人知道我的设置是否不正确吗?

编辑:Web.Release.config 规则:

<system.webServer>
    <rewrite xdt:Transform="Insert">
      <rules>
        <rule name="CanonicalHostNameRule1">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTP_HOST}" pattern="^www\.myDomain\.com$" negate="true" />
          </conditions>
          <action type="Redirect" url="http://www.myDomaim.com/{R:1}" />
        </rule>
        <rule name="http to https" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTPS}" pattern="^OFF$" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

EDIT 2 我最终采用了@BenV 的方法来确保重定向规则与我的暂存槽的 URL 不匹配。有道理:D

【问题讨论】:

  • 你的规则是什么样的?
  • @kwill 添加配置规则

标签: redirect azure ssl


【解决方案1】:

问题实际上在于您的CanonicalHostNameRule1 规则。它基本上说“将任何不是 www.mydomain.com 的内容重定向到 www.mydomain.com。

由于您的暂存槽类似于 www.mydomain-staging.com,因此它会被重定向。

有几种方法可以解决此问题,具体取决于您要使用该规则完成的具体内容。一种方法是添加一条规则以不为暂存重定向。

<conditions>
  <add input="{HTTP_HOST}" pattern="^www\.myDomain\.com$" negate="true" />
  <add input="{HTTP_HOST}" pattern="^www\.myDomain-staging\.com$" negate="true" />
</conditions>

这将对任何不是 www.mydomain.com 和不是 www.mydomain-staging.com 的内容进行重定向。

在不引用暂存槽的情况下编写此代码的另一种方法是:

<conditions logicalGrouping="MatchAny">
  <add input="{HTTP_HOST}" pattern="^myDomain\.com$" />
  <add input="{HTTP_HOST}" pattern=".*myDomain\.azurewebsites\.net$" />
</conditions>

这将检查请求是针对 myDomain.com(不带“www”)还是 myDomain.azurewebsites.net(带或不带“www”),如果其中任何一个为真,则执行重定向。由于暂存 URL 与其中任何一个都不匹配,因此将被忽略。

(免责声明:我没有测试正则表达式,但你明白了)

【讨论】:

  • 目前,为了节省成本,我在成功部署和交换后删除了我的暂存槽。这意味着我的登台 URL 会随着每次部署而改变。因此,在访问暂存 URL 时,我将无法制定一致的规则来防止重定向。关于规范主机名规则,坦率地说,我不确定它为什么存在 :) 我在网上查看,我认为大多数人将它用于 SEO 目的。不过我可能是错的。 @benv
  • 通常是将 myDomain.com 重定向到 www.myDomain.com(反之亦然),或者将 myDomain.azurewebsites.net 重定向到 www.myDomain.com。
  • 另外,你可以指定deployment slot的名字,那你不是每次创建都一样吗?
  • 你能澄清一下“指定部署槽的名称”是什么意思吗?我一直在使用 Visual Studio Web Deploy 进行部署,并且认为我没有为我的部署命名的选项。但是,我可以选择部署到哪个插槽,即生产或暂存。但同样,如果我创建新的暂存部署,URL 将是不同的 GUID。我在网上查找 Azure 云服务的命名部署槽,但找不到任何特定于云服务的内容。如果您能指出我在哪里可以找到该文档的正确方向,那就太好了! @本克
  • 在我之前的评论中标记了错误的用户我认为@benv
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
相关资源
最近更新 更多