使用Azure网站反向代理

时间:2014-07-28 07:50:11

标签: azure cors reverse-proxy

我在Azure网站上托管了一个网络应用。我正在从另一个级别消费API(有方法PUT,POST,GET,DELETE)..我想让我的web应用程序与IE8和IE9兼容,但不幸的是,它不支持PUT的CORS,即使使用XDomainRequest补丁也可以删除。 / p>

现在,我想使用像反向代理这样的东西,以便它会认为请求来自同一个域。可能是反向代理

Azure网站有可能吗?如果是,那怎么样?

1 个答案:

答案 0 :(得分:5)

最后,我找到了自己做的方式:-)

我使用重写模块和ARR实现了它。

以下是我所做的概要 -

  • 使用Web Platform Installer安装ARR和URL重写模块
  • 从IIS启用代理设置 - >应用请求路由(ARR) - >服务器代理设置(在右窗格上)
  • 将网络应用添加到网站
  • 打开应用的Web.config并在<system.webServer> </system.webServer>

    中添加以下内容

    <rewrite> <rules> <rule name="Route Requests from localhost api to Remote API url" stopProcessing="true"> <match url="^api/(.*)" /> <conditions> <add input="{CACHE_URL}" pattern="^(https?)://" /> </conditions> <action type="Rewrite" url="https://www.remotedomain.com/api/{R:1}" logRewrittenUrl="true" /> <serverVariables> <set name="HTTP_ACCEPT_ENCODING" value="" /> </serverVariables> </rule> </rules> <outboundRules> <rule name="Convert remote API response to localhost API" preCondition="ResponseIsHtmlOrJSON"> <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://www.remotedomain.com/api/(.*)" /> <action type="Rewrite" value="api/{R:2}" /> </rule> <preConditions> <preCondition name="ResponseIsHtmlOrJSON"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" /> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^application/json" /> </preCondition> </preConditions> </outboundRules> </rewrite>

  • 添加服务器变量以避免从IIS阻止Gzip

基本上,这将添加重写规则(入站和出站)。<​​/ p>

  1. 入站规则会将所有请求发送至http://localhost/api/{API_PATH}https://www.remotedomain.com/api/{API_PATH}
  2. 出站规则会将来自远程API(https://www.remotedomain.com/api/)的所有响应映射到虚拟API网址http://localhost/api。因此,浏览器将假定发送请求,并且返回的响应来自本地API本身。
  3. 我在这里写了详细的教程:http://www.wrapcode.com/infrastructure/configure-reverse-proxy-with-url-rewrite-and-arr-for-iis/