You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keycloak搭配IIS反向代理8010转60606时重定向过多问题

IIS反向代理Keycloak出现ERR_TOO_MANY_REDIRECTS重定向循环的解决方法

重定向循环的核心原因是IIS反向代理未正确传递请求路径和转发头部,导致Keycloak无法识别外部访问的真实地址,反复生成指向错误地址的重定向,最终引发循环。以下是具体修复步骤:

一、修正IIS的web.config配置

1. 完善Rewrite规则的路径传递

原规则未将请求的具体路径传递给Keycloak,导致所有请求都被转发到根地址,触发错误重定向。修改action节点的url参数:

<action type="Rewrite" url="http://localhost:8010/{R:1}" logRewrittenUrl="true" />

{R:1}会将匹配到的URL路径(如admin)同步传递给Keycloak,确保请求路径正确映射。

2. 配置转发头部的Server变量

Keycloak需要通过X-Forwarded-*头部识别外部请求的真实协议、主机和端口,需先在IIS管理器中开启允许修改这些变量:

  • 打开IIS管理器 → 目标站点 → URL重写 → 右侧「视图服务器变量」 → 添加以下变量:
    • HTTP_X_FORWARDED_PROTO
    • HTTP_X_FORWARDED_HOST
    • HTTP_X_FORWARDED_PORT

然后在web.config的serverVariables节点中添加配置:

<serverVariables>
    <set name="HTTP_X_FORWARDED_PROTO" value="http" />
    <set name="HTTP_X_FORWARDED_HOST" value="localhost" />
    <set name="HTTP_X_FORWARDED_PORT" value="60606" />
</serverVariables>

3. 添加Outbound规则修正重定向地址

Keycloak可能返回指向自身8010端口的重定向地址,需通过Outbound规则替换为外部访问的60606端口:
在<rewrite>节点下新增<outboundRules>配置:

<outboundRules>
    <rule name="Fix Keycloak Redirect Location" preCondition="IsRedirect">
        <match serverVariable="RESPONSE_Location" pattern="http://localhost:8010/(.*)" />
        <action type="Rewrite" value="http://localhost:60606/{R:1}" />
    </rule>
    <preConditions>
        <preCondition name="IsRedirect">
            <add input="{RESPONSE_STATUS}" pattern="3\d\d" />
        </preCondition>
    </preConditions>
</outboundRules>

修改后的完整web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Reverse Proxy to Auth" enabled="true" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="http://localhost:8010/{R:1}" logRewrittenUrl="true" />
                    <serverVariables>
                        <set name="HTTP_X_FORWARDED_PROTO" value="http" />
                        <set name="HTTP_X_FORWARDED_HOST" value="localhost" />
                        <set name="HTTP_X_FORWARDED_PORT" value="60606" />
                    </serverVariables>
                </rule>
            </rules>
            <outboundRules>
                <rule name="Fix Keycloak Redirect Location" preCondition="IsRedirect">
                    <match serverVariable="RESPONSE_Location" pattern="http://localhost:8010/(.*)" />
                    <action type="Rewrite" value="http://localhost:60606/{R:1}" />
                </rule>
                <preConditions>
                    <preCondition name="IsRedirect">
                        <add input="{RESPONSE_STATUS}" pattern="3\d\d" />
                    </preCondition>
                </preConditions>
            </outboundRules>
        </rewrite>
    </system.webServer>
</configuration>

二、调整Keycloak配置

修改Keycloak的配置文件,确保代理相关设置匹配IIS的转发规则:

health-enabled=true
# 仅保留主机和端口,无需前缀http://
hostname=localhost:60606
# 明确使用xforwarded头部(对应IIS传递的X-Forwarded-*系列头部)
proxy-headers=xforwarded
# 关闭严格主机名重定向检查,避免触发不必要的重定向
hostname-strict-redirects=false

http-port=8010
http-enabled=true

三、测试验证

  1. 重启IIS站点和Keycloak服务
  2. 访问http://localhost:60606,确认页面正常跳转到/admin且无重定向循环错误

内容的提问来源于stack exchange,提问作者Stas BZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:47:05