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.
Tags reverse-proxy iis