Azure Web 应用程序将 http 重定向到 https

问题描述 投票:0回答:4

我将 Azure 云与 Web 应用程序一起使用,我的服务器端写在

nodejs
上。 当网络应用程序收到 http 请求时,我想将请求重定向到 https 我找到了解决方案。 我将其放入 web.config 文件中的
rules
标签中

        <rule name="Force HTTPS" enabled="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
            <add input="{HTTPS}" pattern="off" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="false" redirectType="Permanent" />
        </rule>

问题是当我在浏览器中输入“https://myURL.com”时,它会重定向到主屏幕,一切正常, 但是当我将 https 更改为 http“http://myURL.com”时,它会重定向到 https://myURL.com/“并添加到 url“bin/www”,根据该 url 看起来像这样“ http://myURL.com/bin/www”,响应为:页面未找到。

问题是如何重定向一个清晰的url而不向url添加数据?

我的 web.config 文件的一部分:

<rewrite>
      <rules>
        <!-- Do not interfere with requests for node-inspector debugging -->
        <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
          <match url="^bin/www\/debug[\/]?" />
        </rule>
        <!-- First we consider whether the incoming URL matches a physical file in the /public folder -->
        <rule name="StaticContent">
          <action type="Rewrite" url="public{REQUEST_URI}" />
        </rule>
        <!-- All other URLs are mapped to the node.js site entry point -->
        <rule name="DynamicContent">
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True" />
          </conditions>
          <action type="Rewrite" url="bin/www" />
        </rule>
        <!-- Redirect all traffic to SSL -->
         <rule name="Force HTTPS" enabled="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
            <add input="{HTTPS}" pattern="off" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="false" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>
    <!-- 'bin' directory has no special meaning in node.js and apps can be placed in it -->
    <security>
      <requestFiltering>
        <hiddenSegments>
          <remove segment="bin" />
        </hiddenSegments>
      </requestFiltering>
    </security>

感谢您的回答,迈克尔。

azure azure-web-app-service
4个回答
44
投票

2024 年更新:

现在位于“设置”>“配置”>“常规设置”下:


转到 Azure 门户并打开要设置为仅 HTTPS 的 (Web) 应用服务的概述页面。在侧边栏中的设置部分下,有一个TLS/SSL设置选项。

单击它后,您将在屏幕上看到一个选项,将应用程序的协议设置为仅 HTTPS。无需为此手动添加单独的规则集。

这适用于应用程序服务计划的每一层,包括“F”系列(免费订阅)。

TLS/SSL Settings Page

请注意,如果您要添加任何自定义域,您还需要添加相应的 SSL 绑定,您可以使用 LetsEncrypt 或类似工具轻松获取它们。如果您的应用程序的任何自定义主机名缺少 SSL 绑定,则:

启用“仅 HTTPS”后,在这些自定义主机名上访问您的应用程序的客户端将看到安全警告。

PS:我刚刚看到这个问题大约在三年前被问到,当时可能没有直接的选择来做到这一点。但即便如此,我还是发布了我的答案,因为在 Google 上(截至 2020 年 2 月)这个问题仍然在其他 regd 问题中排名第一。 Azure 中的自动 HTTPS 重定向。


13
投票

截至 2017 年 11 月,这现在是 Azure 门户中的一个简单开关:自定义域下的“仅限 HTTPS”。

https://blogs.msdn.microsoft.com/benjaminperkins/2017/11/30/how-to-make-an-azure-app-service-https-only/

在 ARM 中也很简单:

“httpsOnly”: true


8
投票

还有一个免费的开源扩展。

  1. 转到您的网络应用程序设置侧边栏,搜索“扩展”选项卡,然后单击“添加”。

Extension Tab

  1. 向下滚动并找到扩展名将 HTTP 重定向到 HTTPS,作者为 gregjhogan

Add Extension

  1. 接受条款。

Accept Terms

  1. 重新启动Web App以使操作立即生效。

  2. 完成!

有关此扩展实现的更多详细信息,查看 GitHub 上的源代码。最重要的源文件是

applicationhost.xdt
.

引用来自 GitHub (02-08-2017)(学分转到gregjhogan):

applicationhost.xdt

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <location path="%XDT_SITENAME%" xdt:Transform="InsertIfMissing" xdt:Locator="Match(path)">
        <system.webServer xdt:Transform="InsertIfMissing">
            <rewrite xdt:Transform="InsertIfMissing">
                <rules xdt:Transform="InsertIfMissing" lockElements="clear">
                    <rule name="redirect HTTP to HTTPS" enabled="true" stopProcessing="true" lockItem="true">
                        <match url="(.*)" />
                        <conditions>
                            <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                            <add input="{WARMUP_REQUEST}" pattern="1" negate="true" />
                        </conditions>
                        <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </location>
</configuration>

3
投票

R:1 是规则模式的反向引用。您将其附加到此处的网址:

url="https://{HTTP_HOST}/{R:1}" 

将其更改为

url="https://{HTTP_HOST}" 

应该会导致重定向到 https 根目录。

© www.soinside.com 2019 - 2024. All rights reserved.