使用 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>
我有一个像 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>