使用Azure Server Core 2019 VM,我已经设置了许多以ISS / ARR 3.0作为反向代理的Docker容器。
当我访问主机URL:“ http://[hostname]/deploy”时,我希望RP重定向到http://[docker ip]:81
81是运行“ deploy”的单独内部docker容器的暴露端口。仅供参考:这已映射到主机端口1322 ...通过外部浏览器访问主机名:1322可以正常工作。
(我还尝试使用对[hostname]:1322和[docker ip]:1322的重写规则)
无论我做什么,我总是得到404(找不到)
我不知道为什么。 Azure本身是否有东西搞砸了?我似乎可以在Windows中使用的唯一网络是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
答案 0 :(得分:1)
因此,事实证明,问题根本不是docker而是ARR。
当您添加重写规则时,逻辑上希望此“ ^(。*)/ deploy”成为匹配条件,即“以/ deploy结尾”。尝试时,IIS中的重写规则测试器甚至可以正常工作。
结果是,IIS没有将/传递给重写规则引擎。它仅传递文本“ deploy” ...,因此该规则永不匹配,然后将其传递给基础IIS站点而不是目标......当然,/ deploy在基础站点中不存在,因此404。
此处的相关ARR问题