Я настроил следующее правило перезаписи в файле web.config приложения ASP.NET, размещенном в IIS:
<rewrite>
<rules>
<rule name="setappname">
<match url=".*" />
<serverVariables>
<set name="CONTAINER_APP_NAME" value="desiredValue" />
</serverVariables>
</rule>
</rules>
</rewrite>
И в «applicationHost.config» у меня есть следующие фрагменты:
<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>
А ТАКЖЕ
<system.webServer>
<rewrite>
<allowedServerVariables>
<add name="CONTAINER_APP_NAME" />
</allowedServerVariables>
</rewrite>
</system.webServer>
Это отлично работает (я вижу 2 настраиваемых поля в журналах), за исключением случаев, когда путь заканчивается на «/» (например: /
или /APath/
). В этих случаях значение поля container-app
(с использованием переменной сервера) всегда равно "-". Например:
$ curl --silent --output /dev/null -H "X-Forwarded-For:10.3.2.12" http://localhost/APath/
Урожайность:
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 -
Тогда как:
$ curl --silent --output /dev/null -H "X-Forwarded-For:10.3.2.12" http://localhost/home.aspx
Урожайность:
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
Я даже включил отслеживание неудачных запросов, чтобы увидеть, возможно, правило перезаписи не выбирает эти пути, но я могу подтвердить, что правило соответствует пути, а для переменной сервера задано желаемое значение.
Интересно, есть ли что-нибудь еще, что я могу попытаться устранить. Почему такие пути не регистрируются должным образом?