标签: arr

如何使用托管IIS模块正确设置HTTP标头

我在C#中编写了自己的托管IIS HTTP模块.它的目的是在某些条件下简单地设置X-Forwarded-For和X-Forwarded-Proto请求头(这不能用路由规则处理).该模块必须部署到我们的负载均衡器(除了安装了ARR和配置的服务器场的IIS之外).由于某些原因,标头已设置但不会传输到负载平衡器后面的Web服务器.我知道,因为我检查了失败的请求跟踪输出日志. 失败的请求跟踪日志

以下是我们的负载均衡器上安装的所有IIS模块的屏幕截图:

有序模块列表

如您所见,我的托管模块"QA.XForwardedHeadersModule"在ApplicationRequestRouting(ARR)本机模块之前加载.但无论如何都不会传输标题.我甚至用Wireshark跟踪了我的请求.根本没有任何X-Forwarded标头.

这是否意味着托管模块与本机模块不完全兼容,而本机模块(如ARR)无法查看使用托管模块设置的请求标头(如我的自定义编写模块)?这个问题有可能解决方法吗?

.net c# asp.net iis arr

34
推荐指数
1
解决办法
1485
查看次数

IIS AAR - 用于反向代理的URL重写 - 如何发送HTTP_HOST

尝试在几个后端IIS服务器前使用AAR作为反向代理.

  • 分配给运行IIS/AAR的服务器的一个公共IP地址

  • 然后设置出站URL重写规则,以根据主机名重定向到多个后端服务器之一.

有点工作,但总是返回后端服务器默认站点(不是映射到主机名的站点),所以看起来主机名(HTTP_HOST)没有从代理服务器传递到后端服务器.

(我已通过编辑主机验证绕过反向代理,后端服务器返回绑定到主机头的正确站点)

这是规则的一个示例(192.168.0.99是内部服务器,site.myco.com是主机名)

    <rewrite>
        <rules>
            <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                <match url="(.*)" />
                <action type="Rewrite" url="http://192.168.1.99/{R:1}" />                   
            </rule>
        </rules>
    </rewrite>
Run Code Online (Sandbox Code Playgroud)

已经尝试过设置服务器变量

    <!-- Guessing server.myco.com is hard coded -->
    <serverVariables>
        <set name="HTTP_HOST" value="server.myco.com" />
    </serverVariables>

    <!-- Guessing picked up dynamically from incoming request host header -->
    <serverVariables>
        <set name="HTTP_HOST" value="{HTTP_HOST}" />
    </serverVariables>
Run Code Online (Sandbox Code Playgroud)

但是唉总是返回默认绑定 - 任何想法?

asp.net iis url-rewriting iis-7.5 arr

27
推荐指数
2
解决办法
2万
查看次数

带有重写的IIS反向代理无法处理来自我们代理的服务器的重定向

我们拥有服务器A,有时我们会在服务器B上向我们的合作伙伴重写请求.

在某些情况下,服务器B将通过重定向到完全不同的网站进行响应,这就是预期的,假设服务器C.但是,当重定向表单服务器B返回到服务器A时,服务器A将其解释为重定向到服务器A.在iteself(A)上的位置而不是作为到其他网站的重定向 - 服务器C.

我如何注意到重定向到外部网站并实际去那里,而不是假设重定向在我的服务器上(和404ing)?我们正在使用重写模块运行IIS 7.

任何帮助非常感谢.

redirect iis-7 url-rewriting arr

24
推荐指数
2
解决办法
9766
查看次数

IIS作为反向代理 - 压缩来自后端服务器的重写响应

我正在实现一个反向代理,用于将请求路由到后端服务器.

功能上一切正常,但是我担心来自后端服务器的所有响应都会在没有压缩的情况下传输到客户端(Web浏览器).

设置如下:

  • 内部域上无法公开访问的后端服务器.托管Web应用程序https://internal.app
  • 带有IIS 7.5的前端Web服务器,托管主公共网站并充当后端服务器的代理.主要网站是https://site.com.

我想所有请求路由到https://site.com/app/WHATEVERhttps://internal.app/WHATEVER的方式是透明的客户.

我当前的设置基于URL Rewrite 2.0和Application Request Routing IIS扩展.一般方法基于以下文章的指导原则:

有关节web.config的的site.com应用程序:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Route the requests for backend app" stopProcessing="true">
                <match url="^app/(.*)" />
                <conditions>
                    <add input="{CACHE_URL}" pattern="^(https?)://" />
                </conditions>
                <action type="Rewrite" url="{C:1}://internal.app/{R:1}" />
                <serverVariables>
                    <set name="HTTP_ACCEPT_ENCODING" value="" />
                </serverVariables>
            </rule>
        </rules>
        <outboundRules>
            <rule name="RewriteBackendAbsoluteUrlsInResponse" preCondition="ResponseIsHtml1">
                <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://internal.app(\:80)?/(.*)" />
                <action type="Rewrite" value="/app/{R:3}" …
Run Code Online (Sandbox Code Playgroud)

asp.net iis reverse-proxy http-compression arr

20
推荐指数
1
解决办法
2万
查看次数

使用IIS7应用程序请求路由修改标头

我在Tomcat前面使用IIS7应用程序请求路由作为ISAPI重定向的替代.基本的反向代理功能运行良好,但我在最终请求标头中没有足够的信息.我的应用程序存在于几个子域:customerone.ourservice.com,customertwo.ourservice.com等.每个子域运行相同的应用程序,但具有不同的品牌图形.

应用程序当前查看Host标头以告知要显示的品牌.当我使用IIS7反向代理时,该信息将丢失.我的标题现在是:

accept = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
accept-charset = ISO-8859-1,utf-8;q=0.7,*;q=0.7
accept-encoding = gzip,deflate
accept-language = en-gb,en;q=0.7,en-us;q=0.3
cookie = JSESSIONID=......
host = 127.0.0.1:8080
max-forwards = 10
user-agent = Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15
x-original-url = /
x-forwarded-for = [iis7ip]:47567
x-arr-log-id = affbf81c-a5cf-4212-a43b-901cd9adcee6
connection = Keep-Alive
Run Code Online (Sandbox Code Playgroud)

有什么办法可以将原始主机头插入反向代理传递的请求头中吗?

asp.net iis iis-7 url-rewriting arr

18
推荐指数
1
解决办法
1万
查看次数

阻止Azure网站设置WAWebSiteID和ARRAffinity cookie

我有一个共享模式的Windows Azure网站.

现在Azure显然在我的网站上添加了两个cookie:WAWebSiteIDARRAffinity.我了解到那些cookie可用于启用Azure负载均衡器后面的应用程序和请求路由功能(ARR)的粘性会话.

尽管如此,我的网站不需要粘性会话,我也不希望有这些cookie.

首先,我从来没有想到粘性会话在我脑海中浮现,所以我编写了应用程序,以便在所有前端均匀分布的请求中很好地扩展.实际上,粘性会话会改变分发,因为有很多客户做了很多请求而客户几乎没有.当只有第一个请求被分发并且来自同一客户端的后续请求粘贴到同一服务器时,这会严重影响我的应用程序的整体性能.

其次,出于数据隐私原因,我运行了一个无cookie应用程序,任何cookie都被认为是"邪恶的".我知道我可以用一点点javascript删除它们,但我甚至不希望它们被传输到客户端.

问题是:如何在服务器端的Azure网站上禁用粘性会话和这两个cookie?

azure azure-web-sites arr

16
推荐指数
1
解决办法
5490
查看次数

反向代理301重定向时,URL重写会保留原始主机位置

我在IIS 7.5站点上进行了URL重写设置:http://site1.com/

这充当了第二个站点的反向代理:http://site2.com/

以下是事件流:
1.浏览器在http://site1.com/somepath上执行GET
2.这会传递到site2,因为site1是URL Rewrite reverse proxy.这很好,主机设置正确,因为我已经完成了需要这个的mod.
3. site2以301状态响应,并将HTTP Location标头设置为http://site3.com/somenewpath
4. site1使用301响应浏览器,用site1 替换 Location标头中的主机:http:// site1 .COM/somenewpath

我想在第4步中发生的是,site1 在HTTP Location标头中以http://site3.com/somenewpath响应并直接传递此数据.我觉得必须有一个出站规则可以应用来解决这个问题,但还没有弄清楚.

url-rewriting iis-7.5 outbound http-headers arr

15
推荐指数
2
解决办法
2万
查看次数

通过IIS ARR代理Meteor WebSockets

我们需要通过IIS代理代理Meteor.IIS站点接受特定Meteor网站的绑定,并将请求代理到备用端口.

Web套接字不起作用,Meteor正在恢复XHR.

Web.Config文件如下:

<rule name="Meteor reverse proxy" stopProcessing="true">
    <match url="(.*)" />
    <conditions>
        <add input="{CACHE_URL}" pattern="^(.+)://" />
    </conditions>
    <action type="Rewrite" url="{C:1}://127.0.0.1:8008/{R:1}" />
</rule>
Run Code Online (Sandbox Code Playgroud)

通过服务器上的127.0.0.1:8008访问网站,它工作正常.通过IIS代理访问网站失败.

我注意到IIS ARR正在更改标题的大小写,删除标题(sec-websocket-extensions)并添加一些额外内容.这可能没有关系.

IIS代理:

失败的标题

直接:

工作标题

MS文档建议在与NodeJS一起使用时禁用WebSockets.更新此设置无济于事. http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support#TOC301258519

有人遇到过这个问题吗?

更新 您会注意到上面的标题引用了ARR2.5,此版本不支持Web套接字.代理套接字需要3.0.

iis proxy websocket meteor arr

15
推荐指数
1
解决办法
986
查看次数

在PowerShell中创建Web场

我正在尝试在PowerShell中自动创建服务器场.通过手动创建,我得到了以下XML:

<webFarms>
    <webFarm name="alwaysup" enabled="true">
        <server address="alwaysup-blue" enabled="true">
            <applicationRequestRouting httpPort="8001" />
        </server>
        <server address="alwaysup-green" enabled="true">
            <applicationRequestRouting httpPort="8002" />
        </server>
        <applicationRequestRouting>
            <healthCheck url="http://alwaysup/up.html" interval="00:00:05" responseMatch="up" />
        </applicationRequestRouting>
    </webFarm>
    <applicationRequestRouting>
        <hostAffinityProviderList>
            <add name="Microsoft.Web.Arr.HostNameRoundRobin" />
        </hostAffinityProviderList>
    </applicationRequestRouting>
</webFarms>
Run Code Online (Sandbox Code Playgroud)

试图通过PS来做到这一点证明是麻烦的:据我所知,没有专门的API来实现这一点(WebFarmSnapin用于旧版本).

我已将注意力转移到IIS管理Cmdlet,但只有一半工作.

我的代码:

#####
# Overwriting the server farm
#####

Write-Host "Overwriting the server farm $($webFarmName)"

$webFarm = @{};
$webFarm["name"] = 'siteFarm'

Set-WebConfiguration "/webFarms" -Value $webFarm

#####
# Adding the servers
#####

Write-Host "Adding the servers"

$blueServer = @{}
$blueServer["address"] = …
Run Code Online (Sandbox Code Playgroud)

iis powershell load-balancing arr

15
推荐指数
1
解决办法
1306
查看次数

ASP.NET OAuth存在URL重写问题

我的生产设置如下:

  • M1 - ASP.NET网站
  • M2 - IIS URL重写2.0 + ARR 3.0

使用IIS URL Rewrite,对M2的任何请求,例如http:// m2 /app/login.aspx将被重定向到M1,如http:// m1 /app/login.aspx.

在M1上,ASP.NET Open Auth已在网站上实施,以使用Google外部身份验证.当用户点击Google按钮时,浏览器将被重定向到Google登录页面以允许用户进行身份验证.

但是当从M2访问网站时,.net oAuth(https:// accounts.google.com/[query-string])生成的重定向网址将重定向到Google,正在被URL重写替换为http:// m2/[query-string].

所以要清楚; 当通过外部身份验证提供程序进行身份验证请求时,返回302重定向.通常这种形式可能如下所示:

响应标题:

...

位置:https:// accounts.google.com/o/oauth2/auth?big_long_query_string

...

此重定向由位于代理服务器后面的服务器(M1)创建(M2 - IIS URL Rewrite 2.0 + ARR 3.0).因此,重写服务器将Location标头重写为:

响应标题:

...

位置:http:// M1/o/oauth2/auth?big_long_query_string

...

我们需要的是一条规则,它不会在重定向时重写位置URL.它也只能针对某些重定向.大多数情况下,这里提到的行为是必需的,因为所有重定向都被重定向到主代理服务器.有人可以为某些重定向建议解决方案或解决方法吗?

asp.net oauth url-rewrite-module arr

14
推荐指数
1
解决办法
1540
查看次数