如何使用Windows Server 2019 的IIS进行反向代理?

OldNoob 40 信誉分
2026-02-14T08:20:26.93+00:00

如何使用Windows Server 2019 的IIS进行反向代理?

我希望保留我IIS站点的网页,并在https://ip/openlist访问openlist的网页

(我已经申请ip证书,并且能够在https://ip访问)

(我已经安装URL Rewrite Module Application Request Routing)

openlist的config.json

"site_url": "https://我的ip地址/openlist",

屏幕截图 2026-02-14 161349

下面是我的web.config


<?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{R:1}" appendQueryString="true" />

                </rule>

            </rules>

        </rewrite>

    </system.webServer>

</configuration>

Windows 开发 | Internet Information Services
{count} 票

问题作者接受的答案
  1. Tom Tran (WICLOUD CORPORATION) 4,415 信誉分 Microsoft 外部员工 仲裁人
    2026-02-25T10:43:31.01+00:00

    你好 @OldNoob ,

    很高兴听到问题已经得到解决,也感谢你分享了最终生效的具体配置修改。我非常感谢你后续补充了可行的解决方案,这对遇到相同行为的其他用户会非常有帮助。


    问题:

    通过 IIS 以 https://<server>/openlist 的方式访问 OpenList 时,页面出现了重定向循环(ERR_TOO_MANY_REDIRECTS)。虽然 IIS 已经能够成功将请求代理到后端服务,但由于后端应用接收到的内部请求路径与其预期的访问方式不一致,OpenList 仍然持续执行重定向。

    解决方案:

    通过修改 IIS 的重写规则,将请求转发到后端服务上的 /openlist 路径,而不是后端应用的根路径,问题得以解决。具体来说,是将重写规则从:

    http://127.0.0.1:5244{R:1}
    

    修改为:

    http://127.0.0.1:5244/openlist{R:1}
    

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


    再次感谢你确认并分享了这个解决方案。

    如果你觉得这份总结对你有帮助,欢迎考虑接受此答案

    1 个人认为此答案很有帮助。
    0 个注释 无注释

2 个其他答案

排序依据: 非常有帮助
  1. OldNoob 40 信誉分
    2026-02-24T08:59:52.1266667+00:00

    我将

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

    改成了

    <action type="Rewrite" url="http://127.0.0.1:5244/openlist{R:1}" appendQueryString="true" /> 问题就解决了

    0 个注释 无注释

  2. Tom Tran (WICLOUD CORPORATION) 4,415 信誉分 Microsoft 外部员工 仲裁人
    2026-02-16T10:01:41.6366667+00:00

    你好 @OldNoob ,

    从你提供的内容来看,你的 IIS 反向代理其实已经快要成功了,只是缺少了两步小配置,导致 OpenList 一直“迷路”,不停跳回同一个地方,所以浏览器才会提示“重定向次数过多”。

    我会建议你这样做:


    1. 修改 OpenList 的 config.json

    加上下面两行,让它知道自己是在 /openlist 这个子目录里:

    "sub_path": "/openlist",
    "disable_force_https": true
    

    2. 把 IIS 的代理规则换成下面这个

    这样 IIS 会告诉 OpenList:“你是在 /openlist 里面喔”:

    <rule name="OpenList" stopProcessing="true">
        <match url="^openlist/?(.*)$" />
        <action type="Rewrite" url="http://127.0.0.1:5244/{R:1}" />
        <serverVariables>
            <set name="HTTP_X_FORWARDED_PROTO" value="https" />
            <set name="HTTP_X_SCRIPT_NAME" value="/openlist" />
        </serverVariables>
    </rule>
    

    3. 重启 IIS 和 OpenList,然后刷新网页

    做完这些后,访问 https://IP/openlist 应该就能正常打开,不会再一直循环跳转了。


    希望这些信息对你有帮助!如果你觉得我的回答解决了你的问题,欢迎按照这篇指南将其标记为“已回答”,让其他遇到同样问题的人也能受益。

    谢谢!


你的答案

提问者可以将答案标记为“已接受”,版主可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。