webentwicklung-frage-antwort-db.com.de

Umleiten von HTTP zu HTTPS in Azure Application Gateway

Ich habe ein Application Gateway (AG) für die SSL-Terminierung/-abladung konfiguriert. Die AG ist so konfiguriert, dass Port 443 nur für HTTPS-Verbindungen überwacht wird. Ist es möglich, HTTP zu HTTPS umzuleiten, ohne dass Sie:

  • Erstellen Sie ein neues VM, das einen Webserver enthält, der den Datenverkehr umleitet, und konfigurieren Sie AG, um Port 80 mit dem neuen VM in seinem Backend-Pool zu überwachen, oder
  • Lassen Sie auch HTTP-Verbindungen zu meinen Anwendungs-VMs zu und führen Sie die Weiterleitung in meinem Anwendungscode durch

Ich hoffe, ich habe eine Fahne/Funktion in AG übersehen.

10
Davey Chu

@ Jonathan-mas Antwort erweitern,

Dies kann nur über die Befehlszeile erfolgen (Stand Dezember 2017). Ich bevorzuge den Powershell-Ansatz (eingeschränkte Portabilität) nicht, ich bevorzuge AZ CLI , da er diese Frage direkter beantwortet.

  1. Erstellen Sie einen Listener für Ihren HTTP-Verkehr (z. B. FE-HTTP-80-Site). Dies kann über das Azure-Portal oder die CLI erfolgen.

  2. Erstellen Sie einen Listener für Ihren HTTPS-Verkehr (z. B. FE-HTTPS-443-Site). Dies kann im Azure-Portal oder in der CLI erfolgen.

  3. Erstellen Sie eine Weiterleitungskonfiguration:

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. Erstellen Sie eine Regel für den HTTP-Verkehr:

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

Referenz zu Concept: https://docs.Microsoft.com/de-de/Azure/application-gateway/application-gateway-configure-redirect-powershell

AZ CLI-Referenz: https://docs.Microsoft.com/en-us/cli/Azure/

7
PotatoFarmer

Dies wird jetzt vom Azure Application Gateway-Produkt ohne zusätzliche Tools oder Dienste unterstützt. Sie wird mithilfe von PowerShell als in diesem Link beschrieben konfiguriert.

Relevanter PoSH-Code, kopiert und aus der Referenz eingefügt, um Port 80 auf 443 umzuleiten:

# 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

Wenn Sie die Weiterleitung in Ihrem Backend durchführen, können Sie den vom App Gateway gesendeten Header X-Forwarded-Proto verwenden, um die ursprüngliche Anforderung anzuzeigen und umzuleiten, wenn es sich um HTTP handelt, die eine Umleitungsregel verwendet. 

Apache

Fügen Sie dazu in Apache die Datei .htaccess hinzu

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

IIS

Verwenden Sie das IIS rewrite-Modul Fügen Sie dies Ihrer web.config -Datei hinzu

<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

Sie können dies sicherlich nur mit PowerShell meines Wissens. Die Anweisungen dazu in ARM finden Sie in der Dokumentation .

Normalerweise würde ich die Anleitung hier posten, aber es sind einige Schritte damit verbunden, es wäre ein Monsterpost!

1
Martyn C

Die HTTP-zu-HTTPS-Umleitung kann jetzt auch über das Portal konfiguriert werden. Das Konzept ist das gleiche: Erstellen Sie einen Listener für http und fügen Sie dann eine Regel hinzu, die zum https-Listener umleitet.

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

0
Matt Sullivan

Scotts Antwort für IIS funktionierte nicht für mich unter Win2k16\IIS10 und Modul 2.0; Der AG-Proxy gibt einen Upstream-Serverfehler zurück. Wenn Sie versuchen, das Überschreibungsmodul über den Manager "IIS" zu laden, führt dies zu einem fehlerhaften XML-Fehler. 

Die Insert-Transformation wurde entfernt und die Weiterleitungen funktionierten.

   <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

Bitte benutzen Sie den untenstehenden Befehl und es funktioniert für Sie

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