【问题标题】:IIS ARR Reverse proxy running in Docker under Azure VM returns 404在 Azure VM 下的 Docker 中运行的 IIS ARR 反向代理返回 404
【发布时间】:2019-09-30 16:47:09
【问题描述】:

使用 Azure Server Core 2019 VM,我设置了许多 Docker 容器,并将 ISS/ARR 3.0 作为反向代理。

当我访问主机 url:“http://[hostname]/deploy”时,我希望 RP 重定向到 http://[docker ip]:81

81 是运行“部署”的独立内部 docker 容器的公开端口。仅供参考:这被映射到主机端口 1322...通过外部浏览器访问主机名:1322 工作正常。

(我也尝试过对 [hostname]:1322 和 [docker ip]:1322 使用重写规则)

无论我做什么,我总是得到 404(未找到)

我不知道为什么。 Azure 本身有什么东西把这搞砸了吗?我在 Windows 中似乎对 docker 可用的唯一网络是 NAT(通过 docker network ls)。我通过“docker inspect [container]”获得了目标 docker 容器的正确 IP 地址,但我认为这是暴露给主机的 IP 地址,而不是主机上运行的其他容器可以看到的 IP 地址。

我如何知道其他正在运行的 docker 容器可用于 ARR 规则的内部 docker IP 是什么(或者是否有其他方法可以设置它以便动态了解规则?)

我的 ARR web.config 是:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="deploy" stopProcessing="true">
                    <match url="^(.*)/deploy" />
                    <action type="Rewrite" url="http://172.23.60.148:81" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

我的反向代理 docker 文件是:

FROM mcr.microsoft.com/windows/servercore/iis

# Download and install the required URL rewrite and Application Request Routing modules. Clean up after!
ADD http://go.microsoft.com/fwlink/?LinkID=615137 /install/rewrite_amd64.msi
ADD http://go.microsoft.com/fwlink/?LinkID=615136 /install/ARRv3_setup_amd64_en-us.msi
RUN msiexec.exe /i C:\install\rewrite_amd64.msi /qn /log C:\ms_install.log & \
    msiexec.exe /i C:\install\ARRv3_setup_amd64_en-us.msi /qn /log C:\arr_install.log & \
    rd /s /q c:\install

# Enable proxy feature for IIS. Allows us to act as a reverse proxy
RUN .\Windows\System32\inetsrv\appcmd.exe set CONFIG -section:system.webServer/proxy /enabled:"True" /commit:apphost

# The web config should contain our routing to other containers
ADD ./web.config /inetpub/wwwroot/web.config

【问题讨论】:

  • 您可以尝试在 iis 中运行失败的请求跟踪,以检查您的规则为何不起作用link。也可以查看link1link2,了解如何在 iis 中配置 arr 反向代理。
  • 这绝对是一个 ARR 问题。我已经安装了一个虚拟机并添加了 ARR 等,并通过 UI 创建了 ARR 规则。根据规则测试器,localhost/deploy 是匹配项,但是当它在网站中运行时,会出现 404。这是因为它试图找到localhost/deploy 而不是重写。当您查看跟踪日志时,结果是“不匹配”......
  • 可以分享一下arr规则的frt结果吗?

标签: azure docker iis arr


【解决方案1】:

所以,事实证明问题根本不是 docker,而是 ARR。

当您添加重写规则时,期望这个“^(.*)/deploy”是匹配标准是合乎逻辑的,即“以 /deploy 结尾”。 IIS 中的重写规则测试器在您试用时甚至可以正常工作。

事实证明,IIS 没有将 / 传递给重写规则引擎。它只传递文本“deploy”......所以规则永远不会匹配,然后它将它传递到底层 IIS 站点而不是目标......当然 /deploy 在底层站点中不存在,因此404.

此处有相关的 ARR 问题


【讨论】:

  • 我很高兴您的问题得到解决,我请求您将您的帖子标记为答案。它将帮助将来面临类似问题的其他人。
猜你喜欢
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 2021-11-08
  • 2019-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多