web-dev-qa-db-ja.com

Azure Application GatewayでHTTPをHTTPSにリダイレクトする

SSL終了/オフロードを実行するようにアプリケーションゲートウェイ(AG)を構成しました。 AGは、HTTPS接続をポート443でのみリッスンするように構成されています。 HTTPをHTTPSにリダイレクトすることは可能ですか?

  • トラフィックをリダイレクトするWebサーバーを含む新しいVMを作成し、バックエンドプールで新しいVMを使用してポート80でリッスンするようにAGを構成する、または
  • また、アプリケーションVMへのHTTP接続を許可し、アプリケーションコードでリダイレクトを処理する

AGのフラグ/機能を見落としていたと思います。

12
Davey Chu

@ jonathan-masの回答を拡張するには、

これは、コマンドラインのみを使用して実行できます(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

コンセプトに関するリファレンス: https://docs.Microsoft.com/en-us/Azure/application-gateway/application-gateway-configure-redirect-powershell

AZ CLIリファレンス: https://docs.Microsoft.com/en-us/cli/Azure/

7
PotatoFarmer

これは、追加のツールやサービスなしでAzure Application Gateway製品によってサポートされるようになりました。 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 
3
Jonathan Mast

バックエンドでリダイレクトを処理する場合、App Gatewayから送信されたX-Forwarded-Protoヘッダーを使用して、元のリクエストを確認し、リダイレクトルールを使用したHTTPでした。

Apache

Apacheでこれを行うには、。htaccessファイルに以下を追加します

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

IIS

IIS rewrite module を使用して、これを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>
2
Scott Semyan

確かにできますが、私の知る限りPowerShellを使用するだけです。 ARM=でこれを行うための手順は ドキュメント にあります。

私は通常、ここに指示を投稿しますが、これにはいくつかの手順が含まれます。これはモンスター投稿になります。

1
Martyn C

HTTPからHTTPSへのリダイレクトも、ポータルを介して構成できるようになりました。概念は同じです。httpのリスナーを作成してから、httpsリスナーにリダイレクトするルールを追加します。

https://docs.Microsoft.com/en-us/Azure/application-gateway/redirect-http-to-https-portal

0
Matt Sullivan

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>
0
Sam Murcio

以下のコマンドを使用してください、それはあなたのために動作します

$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
0