使用 Azure 平台的 ARR 反向代理

Reverse Proxy with ARR using Azure platform

我有一个像 example.com 这样的域,我还有一个托管在 Azure 中的网站,例如 mysite1.azurewebsites.net。

现在所有来自 live.example.com 的流量都转到 mysite1.azurewebsites.net。我们将自定义域名指向我们的 Windows Azure 网站。我想使用反向代理技术将一些请求(例如来自客户端A的请求)重定向到mysite2.azurewebsites.net,而来自其他客户端的其他请求仍然转到mysite1.azurewebsites.net。所有这些都应该在他们登录后发生。 (live.example.com是登录页面)

Client A         live.example.com  ======> mysite2.azurewebsites.net
Client B         live.example.com  ======> mysite3.azurewebsites.net
Client C         live.example.com  ======> mysite4.azurewebsites.net
Other Clients    live.example.com  ======> mysite1.azurewebsites.net

是否可以通过 ARR 使用反向代理来实现?如果是,如何?

谢谢

此博客 post 解释了如何做到这一点 http://ruslany.net/2014/05/using-azure-web-site-as-a-reverse-proxy/

总而言之,在 live.example.com 上,您需要设置如下所示的 xdt 转换

<?xml version="1.0"?>  
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">  
  <system.webServer>  
    <proxy xdt:Transform="InsertIfMissing" enabled="true" preserveHostHeader="false"  reverseRewriteHostInResponseHeaders="false" />  
  </system.webServer>  
</configuration>

然后您需要设置一个 URL 重写规则来执行您想要的映射。例如,如果您计划使用 UserAgent 作为告诉您客户端名称的内容,那么它将是这样的

<configuration>  
  <system.webServer>  
    <rewrite>  
      <rules>  
        <rule name="ClientA">
          <match url="^(.*)$" />
            <conditions>
              <add input="{HTTP_USER_AGENT}" pattern="Client A" />
            </conditions>
          <action type="Rewrite" url="https://mysite2.azurewebsites.net/{R:1}" />
        </rule>
        <rule name="ClientB">
          <match url="^(.*)$" />
            <conditions>
              <add input="{HTTP_USER_AGENT}" pattern="Client B" />
            </conditions>
          <action type="Rewrite" url="https://mysite3.azurewebsites.net/{R:1}" />
        </rule>
        <rule name="ClientC">
          <match url="^(.*)$" />
            <conditions>
              <add input="{HTTP_USER_AGENT}" pattern="Client C" />
            </conditions>
          <action type="Rewrite" url="https://mysite4.azurewebsites.net/{R:1}" />
        </rule>
        <rule name="Others" stopProcessing="true">
          <match url="^(.*)$" />
          <action type="Rewrite" url="https://mysite1.azurewebsites.net/{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>