Reverse Proxy - o diretório / subpastas virtuais deve corresponder às regras de reconfiguração

2

Estou tentando criar um proxy reverso que reconfigurará todas as solicitações para uma URL específica para outro servidor dentro da DMZ. Eu tenho a configuração e configuração de trabalho com base neste artigo link

Então, minha configuração básica é assim -

URL base que deve acionar a reescrita - http://MySite/Custom?Data=123

URL do proxy - http://MyProxyServer/Service?Data=123

Meu problema é com as duas palavras-chave BOLD acima! Eu simplesmente não consigo reescrever com sucesso todos os pedidos para o novo URL.

Explicando detalhadamente -

Quando eu uso a regra a seguir -

<rule name="ReverseProxy" stopProcessing="true">
   <match url="Custom/(.*)" />
   <action type="Rewrite" url="http://MyProxyServer/Service{R:1}" />
</rule>

Recebo um erro 404 dizendo http://MySite/Service não encontrado!

Rastreamento usando logs de falha no req, consigo ver as regras funcionando perfeitamente (o novo url é criado corretamente), mas eventualmente o pedido termina com erro 404.

A coisa é, se eu ajustar levemente a regra, tudo funciona bem.

Seguindo os trabalhos de regra -

<rule name="ReverseProxy" stopProcessing="true">
   <match url="Service/(.*)" />
   <action type="Rewrite" url="http://MyProxyServer/Service{R:1}" />
</rule>

Mas preciso alterar meu URL básico para http://MySite/Service?Data=123 de http://MySite/Custom?Data=123

Então, existe uma limitação com a implementação do proxy reverso no IIS 7, onde temos que combinar os nomes dos subdiretórios / diretórios virtuais entre fonte e proxy ou as minhas regras são inadequadas?

    
por aix 08.03.2012 / 16:59

1 resposta

1

Há um problema não documentado com ARR / reescrita, em que não é possível mapear subpastas. Eu estou adicionando isso para minha referência e espero que ajude os outros

Uma solução que tentei que parece ser eficaz, é criar uma pasta dentro de seu aplicativo da Web de origem, adicionar um web.config dentro dessa pasta com as regras apontando para o aplicativo da Web de destino:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://<<<TARGET_HOSTNAME>>>{R:1}" />
                    <serverVariables>
                        <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
                        <set name="HTTP_ACCEPT_ENCODING" value="" />
                    </serverVariables>
                </rule>
            </rules>
            <outboundRules>
                <rule name="RestoreAcceptEncoding" preCondition="RestoreAcceptEncoding">
                    <match serverVariable="HTTP_ACCEPT_ENCODING" pattern="^(.*)$" />
                    <action type="Rewrite" value="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" />
                </rule>
                <preConditions>
                    <preCondition name="RestoreAcceptEncoding">
                        <add input="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" pattern=".*" />
                    </preCondition>
                </preConditions>
            </outboundRules>
        </rewrite>
    </system.webServer>
</configuration>

Também adicionamos instruções de link ao redor de GZIP

    
por 30.10.2017 / 00:41