我正在尝试使用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访问配置反向代理。
答案 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/
一旦完成了这一切,一切都开始奏效。