it-swarm.com.ru

Перенаправить HTTP на HTTPS в шлюзе приложений Azure

Я настроил шлюз приложений (AG) для завершения/разгрузки SSL. AG настроен на прослушивание только порта 443 для соединений HTTPS. Можно ли перенаправить HTTP на HTTPS без необходимости:

  • Создайте новый VM, который содержит веб-сервер, который перенаправляет трафик, и настройте AG на прослушивание порта 80 с новым VM в его внутреннем пуле, или
  • Также разрешить HTTP-соединения с виртуальными машинами моего приложения и обрабатывать перенаправление в коде моего приложения

Я надеюсь, что пропустил флаг/функцию в AG.

10
Davey Chu

Чтобы расширить на @ Jonathan-Mas ответа,

Это можно сделать только с помощью командной строки (по состоянию на декабрь 2017 года). Я не предпочитаю подход Powershell (ограниченная переносимость), я предпочитаю AZ CLI , поскольку он более прямолинеен в ответе на этот вопрос.

  1. Создайте прослушиватель для своего HTTP-трафика (например, FE-HTTP-80-Site). Это можно сделать с помощью портала Azure или интерфейса командной строки.

  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 как описано в этой ссылке .

Соответствующая копия кода PoSH и вставка из ссылки для перенаправления порта 80 на 443:

# 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

Если вы обрабатываете перенаправление на своем бэкэнде, вы можете использовать заголовок 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>
2
Scott Semyan

Вы, конечно, можете, только с PowerShell, насколько мне известно. Инструкции по выполнению этого в ARM находятся в документации .

Я обычно выкладываю инструкции здесь, но в этом участвует целый ряд шагов, это будет сообщение монстра!

1
Martyn C

Ответ Скотта на 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 -Имя приложенияGatewayHttpListener -ApplicationGateway $ appgw

$ myHTTPListener = Get-AzureRmApplicationGatewayHttpListener -Имя приложенияGatewayHttpListener -ApplicationGateway $ appgw

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

$ redirectconfig = Get-AzureRmApplicationGatewayRedirectConfiguration -Имя перенаправленияHttptoHttps -ApplicationGateway $ appgw

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

Set-AzureRmApplicationGateway -ApplicationGateway $ appgw **

0
Sayed Azharuddin