在IIS

时间:2015-11-27 13:28:02

标签: iis url-rewriting adfs arr

我正在尝试使用IIS上的ARR和URL重写模块实现反向代理。 我有两个名为A和B的服务器。我在服务器“A”上安装了ADFS,服务器“B”仅用于反向代理。我在服务器“B”上安装了ARR和URL-Rewrite模块。

例如服务器“A”域名“myadfs1.com”和服务器“B”域名“myproxy.com”。联合服务器登录页面URL - https://myadfs1.com/adfs/ls/IdpInitiatedSignon.aspx

问题陈述 -
 当我访问直接ADFS URL,即https://myadfs1.com/adfs/ls/IdpInitiatedSignon.aspx时,获得响应和ADFS登录页面正常。没有问题。 但是当我试图通过代理访问ADFS登录页面时,https://myproxy.com/adfs/ls/IdpInitiatedSignon.aspx获得503错误,即服务不可用。

我正在使用重写规则 -

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <outboundRules>
                <preConditions>
                    <preCondition name="ResponseIsHtml1">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                </preConditions>
            </outboundRules>
            <rules>
                <clear />
                <rule name="ReverseProxyInboundRule2" stopProcessing="true">
                    <match url="[a][d][f][s](.*)" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{HTTPS}" pattern="On" />
                    </conditions>
                    <action type="Rewrite" url="https://myadfs1.com/adfs{R:1}" appendQueryString="true" logRewrittenUrl="true" />
                </rule>                
            </rules>
        </rewrite>
        <tracing>
            <traceFailedRequests>
                <add path="*">
                    <traceAreas>
                        <add provider="ASP" verbosity="Verbose" />
                        <add provider="ISAPI Extension" verbosity="Verbose" />
                        <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,FastCGI,WebSocket" verbosity="Verbose" />
                    </traceAreas>
                    <failureDefinitions timeTaken="00:00:00" statusCodes="400-600" />
                </add>
            </traceFailedRequests>
        </tracing>
    </system.webServer>
    <system.web>
        <identity impersonate="false" />
    </system.web>
</configuration>

一些观察 -

如果我尝试访问https://myproxy.com/adfs/ls/IdpInitiatedSignon.aspx网址,那么我在代理服务器上的IIS上没有任何日志。但是,如果我尝试将“adfs”替换为“adfs1”,则会尝试使用相同的URL,然后IIS会记录请求并收到404错误。

所以我正在寻找帮助为我的ADFS访问配置反向代理。

1 个答案:

答案 0 :(得分:0)

我自己偶然发现了这一点,事实证明,当我在过去安装ADFS并稍后删除它时,我的IIS服务器上没有删除某些内容。

Windows中的http.sys组件具有一个名为“URL预留”的功能,它允许多个应用程序在同一主机名上工作而不会相互干扰。这使IIS,ADFS,远程桌面网关等能够在同一台服务器上运行。

我在服务器上运行了以下命令:

netsh http show urlacl

这列出了我所有的URL预订,其中一些是针对ADFS的 - 尽管它不再安装在那台特定的机器上!然后我发出了这些命令:

netsh http delete urlacl http://+:80/adfs/
netsh http delete urlacl https://+:443/adfs/
netsh http delete urlacl https://+:49443/adfs/
netsh http delete urlacl https://+:443/FederationMetadata/2007-06/

一旦完成了这一切,一切都开始奏效。