Regras de saída do proxy reverso do IIS que redirecionam para servidores externos

1

Estou trabalhando para estabelecer o IIS como um proxy reverso. Eu configurei dois sites internos (servidos pelo IIS) chamados Folha de Pagamento e Webmail, e um site externo (servido por um servidor da Web diferente) denominado IPS. Todos os três sites estão no host local, mas o Folha de Pagamento liga-se à porta 12084, o Webmail à porta 12085 e o IPS à porta 2080 Eu então criei três regras de entrada que direcionam xyz.com/ips/, xyz.com/payroll/ e xyz.com/webmail/ para seus respectivos servidores. Tudo isso funciona bem.

    <rules>
        <rule name="Reverse Proxy to ips" enabled="true" 
            stopProcessing="true">
            <match url="^ips/(.*)" />
            <action type="Rewrite" url="http://localhost:2080/{R:1}" />
                <serverVariables> 
                    <set name="HTTP_ACCEPT_ENCODING" value="" /> 
                </serverVariables> 
            </rule>

            <rule name="Reverse Proxy to webmail" stopProcessing="true">
            <match url="^webmail/(.*)" />
            <action type="Rewrite" url="http://localhost:12084/{R:1}" />
                <serverVariables> 
                    <set name="HTTP_ACCEPT_ENCODING" value="" /> 
                </serverVariables> 
            </rule>

            <rule name="Reverse Proxy to payroll" stopProcessing="true">
            <match url="^payroll/(.*)" />
            <action type="Rewrite" url="http://localhost:12085/{R:1}" />
                <serverVariables> 
                    <set name="HTTP_ACCEPT_ENCODING" value="" /> 
                </serverVariables> 
            </rule>
        </rules>

Escrevi então uma regra de saída que deve corrigir as URLs para que funcionem de clientes externos.

            <rule name="Add application prefix" preCondition="IsHTML">
                <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, 
                  Img, Input, Link, Script" pattern="^/(.*)" />
                <conditions>
                    <add input="{URL}" pattern="^/(webmail|payroll|ips)/.*" />
                </conditions>
                <action type="Rewrite" value="/{C:1}/{R:1}" />
            </rule>
            <preConditions>
                <preCondition name="IsHTML">
                    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                </preCondition>
            </preConditions>

E é aí que o problema começa. Folha de pagamento e Webmail funcionam muito bem: são sites de teste contendo apenas um href para eles mesmos, que são corrigidos corretamente. O IPS, no entanto, é uma história diferente. Você vê, IPS / index.html contém um redirecionamento para /html/index.php.

            <meta HTTP-EQUIV="REFRESH" content="0; url=/html/index.php">

Agora vem minha pergunta . Por razões que eu não entendo completamente, esse redirecionamento não é consertado e, como resultado, o cliente acaba nas "pastagens eternas".

Suspeito que a regra de saída funcione apenas para sites atendidos pelo próprio IIS, mas não afetará servidores externos. Minha suspeita adicional é que eu poderia fazer isso funcionar definindo IPS (localhost: 2080) como um servidor no "Server Farm", e ajustar a regra de saída em conformidade. Eu estou querendo saber se o acima está correto, e - em caso afirmativo - como a regra de saída deve ser corrigida.

    
por aag 25.12.2012 / 09:42

0 respostas