我需要使用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>
如果我像这样打开URL,则此规则不起作用:
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这仍然无法正常工作.....
这里怎么了?
在这种情况下,如果您的请求是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握手可能会失败。