IIS não define X-FORWARDED-HOST

3

Eu tenho um servidor IIS [no WinServer 2016] que atua como um proxy reverso para alguns servidores web do Kestrel. No momento, estou tentando configurar o IIS para encaminhar todos os cabeçalhos X-Forwarded *. Para os cabeçalhos X-Forwarded-For e X-Forwarded-Proto, tudo funciona bem, mas não para o X-Forwarded-Host.

Aqui está "Variáveis de servidor permitidas" no nível do servidor:

Aquiestáoqueeuvejonodepurador,quandoasolicitaçãoHTTPatingeoKestrelwebserver

Infelizmente eu não posso criar um despejo de servidores PROD, mas desde que alguns recursos não estão funcionando corretamente, a situação deve ser semelhante ao ambiente DEV.

Depois de ler alguns artigos sobre como configurar o IIS como um proxy reverso, tenho a impressão de que todos os cabeçalhos X-Forwarded- * devem ser adicionados automaticamente. Ou o XFH é uma exceção e eu preciso configurá-lo manualmente?

Eu seria muito apreciado por qualquer tipo de ajuda!

    
por Volodymyr Usarskyy 19.07.2017 / 09:42

1 resposta

0

Isso me levou um tempo para descobrir. Existem algumas esquisitices com o funcionamento do IIS com suas variáveis de servidor, veja abaixo:

  1. Você deve definir a variável na GUI do InetMgr. Descobri que, ao tentar especificar apenas o uso do web.config, o servidor retornará 500 erros internos do servidor até que seja adicionado. (Você já fez isso, então nada para mudar aqui.)

  2. Um valor dinâmico para a solicitação ou estático para cada solicitação deve ser atribuído. Isso é pré-formado no web.config:

Código com destaque de marcação e sintaxe

Se você deseja copiar e colar:

 <?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http:/example.com/{R:1}" />
                    <serverVariables>
                        <set name="ORIGINAL_HOST20" value="{HTTP_HOST}" />
                        <set name="HTTP_X_FORWARDED_PROTO" value="https" />
                        <set name="HTTP_X_FORWARDED_PORT" value="443" />
                        <set name="HTTP_X_FORWARDED_HOST" value="example.com" />
                    </serverVariables>
                </rule>
            </rules>
    </rewrite>
    <httpErrors errorMode="DetailedLocalOnly" />
    <directoryBrowse enabled="false" />
</system.webServer>

Espero que isso ajude!

    
por 13.10.2017 / 06:28