windows server 2019 iis反向代理设置教程:解决重定向循环

小编:大闷头 更新时间:2026-03-26 15:09

在windows server 2019中使用iis配置反向代理时,经常遇到访问子目录(如 /openlist)却陷入无限重定向循环(ERR_TOO_MANY_REDIRECTS)的问题。这种情况通常是因为iis的URL重写规则与后端应用的路径预期不匹配,导致应用不断尝试修正访问地址。通过对 web.config 规则进行精准的路径对齐,可以有效打通代理链路。

windows server 2019 iis反向代理设置教程:解决重定向循环

一、 修改web.config实现路径对齐

如果你的后端服务(如openlist)运行在本地5244端口,且你希望通过 https://ip/openlist 访问,重写后的目标地址包含完整的子路径。

1、错误配置:仅转发根目录,导致后端程序找不到对应的路由。

<action type="Rewrite" url="http://127.0.0.1:5244{R:1}" appendQueryString="true" />

2、正确配置:将转发目标显式指定到子路径下,前后端路径保持一致。

<action type="Rewrite" url="http://127.0.0.1:5244/openlist{R:1}" appendQueryString="true" />

二、 优化URL重写规则逻辑

为了让代理更加稳定,建议将完整的重写逻辑更新至此配置。如果后文包含多个规则,请务必开启 stopProcessing="true" 以防止规则冲突。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="OpenlistProxy" stopProcessing="true">
                    <match url="^openlist(/.*)?" ignoreCase="true" />
                    <action type="Rewrite" url="http://127.0.0.1:5244/openlist{R:1}" appendQueryString="true" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

执行此修改后,iis会使用与外部访问一致的基路径将请求转发到后端。由于后端程序现在始终在其预期的 /openlist 路径下接收数据,不再尝试通过重定向来修正URL,重定向循环也随之消失。

三、 配置后端应用环境

除了iis端的调整,后端程序(如openlist)的配置文件也需要进行对应的“降维”适配,防止其强制跳转https或根目录。

1、修改config.json:包含 site_url 子路径。

"site_url": "https://你的ip地址/openlist",
"sub_path": "/openlist"

2、关闭强制跳转:如果iis已经配置了SSL证书,建议在后端程序中设置 "disable_force_https": true,将加密工作完全交给iis处理。

四、 检查ARR模块设置

反向代理的成功离不开Application Request Routing (ARR) 模块的全局授权。

1、进入iis管理器,点击服务器根节点。

2、找到Application Request Routing Cache

3、在右侧点击Server Proxy Settings

4、勾选了Enable proxy,否则所有的重写规则都会被拦截并返回404错误。

这种情况多见于前后端路径配置不对等。如果以后在访问时出现静态资源(图片、CSS)加载失败,通常是由于web.config中的 match url 正则表达式未包含对斜杠的处理,建议按照上述规则重新校对。