campo personalizado no log IIS tem "-" para o valor para certos caminhos

votos
0

Tenho configurado o seguinte regra de reescrita em web.config de uma aplicação ASP.NET hospedado no IIS:

    <rewrite>
        <rules>
            <rule name=setappname>
                <match url=.* />
                <serverVariables>
                    <set name=CONTAINER_APP_NAME value=desiredValue />
                </serverVariables>
            </rule>
        </rules>
    </rewrite>

E em applicationHost.config, eu tenho os seguintes trechos:

    <sites>
        <site name=mysite id=1 serverAutoStart=true>
            <application path=/ applicationPool=.NET v4.5>
                <virtualDirectory path=/ physicalPath=c:\mysite />
            </application>
            <bindings>
                <binding protocol=http bindingInformation=*:80: />
            </bindings>
            <logFile directory=c:\iislog period=MaxSize truncateSize=4294967295>
                <customFields>
                    <add logFieldName=x-forwarded-for sourceName=X-Forwarded-For sourceType=RequestHeader />
                    <add logFieldName=container-app sourceName=CONTAINER_APP_NAME sourceType=ServerVariable />
                </customFields>
            </logFile>
            <applicationDefaults preloadEnabled=true />
        </site>
    </sites>

E

<system.webServer>
    <rewrite>
        <allowedServerVariables>
            <add name=CONTAINER_APP_NAME />
        </allowedServerVariables>
    </rewrite>
</system.webServer>

Isso funciona bem (Eu vejo os 2 campos personalizados nos logs), exceto quando termina o caminho com / (por exemplo: /ou /APath/). Nesses casos, o valor do container-appcampo (usando Variável Server) é sempre -. Por exemplo:

$ curl --silent --output /dev/null -H X-Forwarded-For:10.3.2.12 http://localhost/APath/

Rendimentos:

2019-12-02 20:47:32 172.29.152.165 GET /APath/ - 80 - 192.168.7.4 curl/7.67.0 - 200 0 0 121 10.3.2.12,+::1 -

Enquanto que:

$ curl --silent --output /dev/null -H X-Forwarded-For:10.3.2.12 http://localhost/home.aspx

Rendimentos:

2019-12-02 20:50:17 172.29.152.165 GET /home.aspx - 80 - 192.168.7.4 curl/7.67.0 - 200 0 0 63 10.3.2.12,+::1 desiredValue

Eu até habilitado Rastreamento de Solicitação Falha para ver se talvez a regra de reescrita não está pegando esses caminhos, mas eu posso confirmar que a regra corresponder o caminho e a variável servidor está definido para o valor desejado.

Gostaria de saber se há alguma coisa que eu posso tentar resolver isso. Por tais caminhos não se identificou corretamente?

Publicado 02/12/2019 em 23:58
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Acho que encontrei o problema e postá-lo aqui para os outros.

Ao olhar para os Traços solicitação falhou, eu posso ver que o IIS cria pedidos criança para documentos padrão diretórios (URIs que terminam com '/'). Aparentemente, pelo projeto, reescrever as regras não se aplicam aos pedidos criança (por exemplo: https://forums.iis.net/t/1152699.aspx ).

Para resolver isso, eu criei uma regra de reescrita para mudar tais pedidos ser pedidos explícitos para documentos para a outra regra de reescrita é aplicado no nível do processo principal:

       <rewrite>
            <rules>
                <rule name="setExplictDoc">
                    <match url="(.*(APath)/$)" />
                    <action type="Rewrite" url="{R:0}Default.aspx" />
                </rule>
                <rule name="setappname">
                    <match url=".*" />
                    <serverVariables>
                        <set name="CONTAINER_APP_NAME" value="desiredValue" />
                    </serverVariables>
                </rule>
            </rules>
        </rewrite>

A idéia veio de https://support.microsoft.com/en-ca/help/3050055/iis-digest-authentication-does-not-permit-pass-though-authentication-f

Respondeu 03/12/2019 em 01:16
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more