13

我已经配置了一个应用程序网关 (AG) 来执行 SSL 终止/卸载。AG 配置为仅在端口 443 上侦听 HTTPS 连接。是否可以将 HTTP 重定向到 HTTPS 而不必:

  • 创建一个包含重定向流量的 Web 服务器的新 VM,并将 AG 配置为在其后端池中使用新 VM 侦听端口 80,或
  • 还允许 HTTP 连接到我的应用程序 VM,并在我的应用程序代码中处理重定向

我希望我忽略了 AG 中的标志/功能。

4

7 回答 7

10

为了扩展乔纳森·马斯特的回答

这只能使用命令行来完成(截至 2017 年 12 月)。我不喜欢 Powershell 方法(可移植性有限),我更喜欢AZ CLI,因为它更直接地回答了这个问题。

  1. 为您的 HTTP 流量创建一个侦听器(例如FE-HTTP-80-Site)。这可以使用 Azure 门户或 CLI 完成。

  2. 为您的 HTTPS 流量创建一个侦听器(例如FE-HTTPS-443-Site)。这可以在 Azure 门户或 CLI 中完成。

  3. 创建重定向配置:

az network application-gateway redirect-config create \
--gateway-name AppGateway \
-g RSgroupAppGateway \
-n Redirect-Site-toHTTPS \
--type Permanent \
--include-path true \
--include-query-string true \
--target-listener FE-HTTPS-443-Site
  1. 为 HTTP 流量创建规则:
az network application-gateway rule create \
--gateway-name AppGateway \
-g RSgroupAppGateway \
-n Rule-HTTP-80-Site \
--rule-type Basic \
--http-listener FE-HTTP-80-Site \
--redirect-config Redirect-Site-toHTTPS

概念参考:使用 Azure PowerShell 创建具有基于 URL 路径的重定向的应用程序网关

AZ CLI 参考:Azure 命令行界面 (CLI) 文档

于 2017-12-07T17:03:05.690 回答
3

Azure 应用程序网关产品现在支持此功能,无需任何其他工具或服务。它是使用 PowerShell 配置的,如此链接中所述

从将端口 80 重定向到 443 的参考中复制和粘贴的相关 PoSH 代码:

# Get the application gateway
$gw = Get-AzureRmApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG

# Get the existing HTTPS listener
$httpslistener = Get-AzureRmApplicationGatewayHttpListener -Name appgatewayhttplistener -ApplicationGateway $gw

# Get the existing front end IP configuration
$fipconfig = Get-AzureRmApplicationGatewayFrontendIPConfig -Name appgatewayfrontendip -ApplicationGateway $gw

# Add a new front end port to support HTTP traffic
Add-AzureRmApplicationGatewayFrontendPort -Name appGatewayFrontendPort2  -Port 80 -ApplicationGateway $gw

# Get the recently created port
$fp = Get-AzureRmApplicationGatewayFrontendPort -Name appGatewayFrontendPort2 -ApplicationGateway $gw

# Create a new HTTP listener using the port created earlier
Add-AzureRmApplicationGatewayHttpListener -Name appgatewayhttplistener2  -Protocol Http -FrontendPort $fp -FrontendIPConfiguration $fipconfig -ApplicationGateway $gw 

# Get the new listener
$listener = Get-AzureRmApplicationGatewayHttpListener -Name appgatewayhttplistener2 -ApplicationGateway $gw

# Add a redirection configuration using a permanent redirect and targeting the existing listener
Add-AzureRmApplicationGatewayRedirectConfiguration -Name redirectHttptoHttps -RedirectType Permanent -TargetListener $httpslistener -IncludePath $true -IncludeQueryString $true -ApplicationGateway $gw

# Get the redirect configuration
$redirectconfig = Get-AzureRmApplicationGatewayRedirectConfiguration -Name redirectHttptoHttps -ApplicationGateway $gw


# Add a new rule to handle the redirect and use the new listener
Add-AzureRmApplicationGatewayRequestRoutingRule -Name rule02 -RuleType Basic -HttpListener $listener -RedirectConfiguration $redirectconfig -ApplicationGateway $gw

# Update the application gateway
Set-AzureRmApplicationGateway -ApplicationGateway $gw 
于 2017-08-23T18:30:47.043 回答
3

如果您在后端处理重定向,则可以使用 App Gateway 发送的X-Forwarded-Proto标头查看原始请求,如果是 HTTP,则使用重定向规则进行重定向。

阿帕奇

要在 Apache 上执行此操作,请将以下内容添加到您的.htaccess文件中

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI}

IIS

使用 IIS重写模块将此添加到您的web.config文件

<rewrite xdt:Transform="Insert">
  <rules>
    <rule name="HTTPS rewrite behind App Gw rule" stopProcessing="true">
      <match url="^(.*)$" ignoreCase="false" />
      <conditions>
        <add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$" ignoreCase="false" />
      </conditions>
      <action type="Redirect" redirectType="Found" url="https://{SERVER_NAME}{URL}" />
    </rule>
  </rules>
</rewrite>
于 2017-01-06T19:14:03.753 回答
1

HTTP to HTTPS redirection can now also be configured through the portal. The concept is the same: create a listener for http, then add a rule that redirects to the https listener.

https://docs.microsoft.com/en-us/azure/application-gateway/redirect-http-to-https-portal

于 2019-07-25T06:12:55.463 回答
1

你当然可以,但据我所知,只有使用 PowerShell。在 ARM 中执行此操作的说明在文档中。

我通常会在此处发布说明,但其中涉及许多步骤,这将是一个怪物帖子!

于 2016-04-12T14:29:56.583 回答
0

请使用以下命令,它将为您工作

$appgw = Get-AzureRmApplicationGateway -Name GatewayName -ResourceGroupName ResourcegroupName

$myHTTPSListener = Get-AzureRmApplicationGatewayHttpListener -Name appGatewayHttpListener -ApplicationGateway $appgw

$myHTTPListener = Get-AzureRmApplicationGatewayHttpListener -Name appGatewayHttpListener -ApplicationGateway $appgw

Add-AzureRmApplicationGatewayRedirectConfiguration -Name redirectHttptoHttps -RedirectType Permanent  -TargetListener $myHTTPSListener -IncludePath $true -IncludeQueryString $true -ApplicationGateway $appgw

$redirectconfig = Get-AzureRmApplicationGatewayRedirectConfiguration -Name redirectHttptoHttps   -ApplicationGateway $appgw

Add-AzureRmApplicationGatewayRequestRoutingRule -Name redirectrule -RuleType Basic -HttpListener $myHTTPListener -RedirectConfiguration $redirectconfig  -ApplicationGateway $appgw

Set-AzureRmApplicationGateway -ApplicationGateway $appgw
于 2018-09-10T10:49:07.053 回答
0

Scott 对 IIS 的回答在 Win2k16 \ IIS10 和模块 2.0 上对我不起作用;AG 代理返回上游服务器错误;尝试通过 IIS 管理器加载重写模块将导致格式错误的 XML 错误。

删除了插入转换,重定向开始工作。

   <rewrite>
        <rules>
            <rule name="HTTP To HTTPS Redirect Behind App Gtwy" stopProcessing="true">
                <match url="^(.*)$" ignoreCase="false" />
                <conditions logicalGrouping="MatchAny">
                    <add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$" ignoreCase="false" />
                </conditions>
                <action type="Redirect" url="https://{SERVER_NAME}{URL}" redirectType="Found" />
            </rule>
        </rules>
    </rewrite>
于 2017-03-23T05:30:36.427 回答