我需要使用ARR在IIS中创建代理重写
所以:
我有2台服务器:
https://server1.com
https://server2.com
现在每个人都有虚拟文件夹
https://server1.com
FilesFolder
https://server2.com
FilesFolder
我将文件保存在server2中
喜欢:
https://server2.com
FilesFolder
users-profile
test.png
现在,当我打开Chrome浏览器时需要
https://server1.com/FilesFoler/users-profile/test.png
我希望该请求转到
https://server2.com/FilesFoler/users-profile/test.png
现在我为服务器1做代理规则了
测试1:
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="https://server2/{C:0}" />
<conditions>
<add input="{URL}" pattern="/users-profile/.*" />
</conditions>
</rule>
</rules>
如果我打开以下网址,此规则将无效:
https://server1.com/FilesFoler/users-profile/test.png
但是我打开的工作是: https://server1.com/FilesFoler/FilesFoler/users-profile/test.png
然后我尝试另一条规则;
测试2
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="https://server2/FilesFolder/{C:0}" />
<conditions>
<add input="{URL}" pattern="/users-profile/.*" />
</conditions>
</rule>
</rules>
但是当我打开https://server1.com/FilesFoler/users-profile/test.png时 这仍然行不通.....
这是怎么了?
答案 0 :(得分:0)
在这种情况下,如果您的请求是https://server1.com/FilesFoler/users-profile/test.png。
当IIS处理条件模式<add input="{URL}" pattern="/users-profile/.*" />
时。
然后,您的{C:0}应该是users-profile / test.png。 因此该请求将被重写为
https://server2/users-profile/test.png
代替
https://server2.com/FilesFoler/users-profile/test.png。
因此,请将[C:0}替换为{R:1}或{R:0}
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="https://server2/{R:0}" />
<conditions>
<add input="{URL}" pattern="/users-profile/.*" />
</conditions>
</rule>
由于您没有对server2使用ssl-offloading。请确保server2使用的是受信任的证书,否则ARR和Server2之间的SSL握手可能会失败。
如果出现404错误,请记住在IIS管理器->服务器节点->应用程序请求路由缓存->启用代理中启用代理设置。