iis7反向代理设置(iis7反向代理内容页会404)

iis7反向代理设置(iis7反向代理内容页会404)

扫码添加渲大师小管家,免费领取渲染插件、素材、模型、教程合集大礼包!

当程序中使用Redirect跳转时,实际上是通过Http Header中的Location给浏览器传递一个跳转的Url。

iis7反向代理设置(iis7反向代理内容页会404)

使用IIS做反向代理的情况下,由于程序默认不会自动感知反向代理的存在,所以Location中的Url是相对程序本身的,浏览器拿到这个Url进行跳转时,不能通过反向代理的站点进行访问。

比如程序中

Redirect("hello")

的结果是:Location: /hello

程序被反向代理时加了一个a的目录,通过http://xxx/a才可以访问到程序。

在Redirect后,浏览器收到Location: /hello,然后通过http://xxx/hello当然不能正常访问。

这时候就要对Location进行修正,还是通过web.config进行配置:

<rewrite>

...

<outboundRules>

<rule name="Http Redirect" preCondition="Http302">

<match serverVariable="RESPONSE_LOCATION" pattern=".*" />

<action type="Rewrite" value="/{C:1}{R:0}" />

<conditions>

<add input="{REQUEST_URI}" pattern="^/([^/]+)/.*" />

<add input="{RESPONSE_LOCATION}" pattern="^http[s]?://.*" negate="true" />

</conditions>

</rule>

<preConditions>

<preCondition name="Http302">

<add input="{RESPONSE_STATUS}" pattern="302" />

</preCondition>

</preConditions>

</outboundRules>

</rewrite>

上边的配置对站点反向代理的所有子站点生效。

可以看到其中定义了preConditions,只有HTTP 302的才处理。

然后对于要处理的RESPONSE_LOCATION,还定义了两个匹配条件:

(1)请求Url的模式:^/([^/]+)/.* (因为我这里反向代理的子站点都指定了一个目录,所以这里会匹配并获取这个目录)

(2)响应的Location不是http或者https开头的完整url(如果没有这种情况,可以不加这个规则)

最后就是对Location进行重写,重写的规则是:/{C:1}{R:0},C:1是上边匹配REQUEST_URI获取的目录,R:0是原Location。

这样处理后浏览器发出的请求就能正常处理了。

其它说明:

(1)如果的反向代理入站规则不是增加目录的方式,请继续查看IIS官方文档:

https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/modifying-http-response-headers

(2)另外上边的处理规则中忽略了Location开头为http的地址,但是如果你勾选了“Reverse rewrite host in response headers”,反向代理会自动修改Location中的主机名,如果这个Location是到qq.com的,这显然会带来问题。但是如果你不勾选,程序可能获取不到真实的HTTP HOST或者获取不到cookie等值(这里没有用到,所以没有实际测试过)。

分享到 :
相关推荐

网络数据的安全重要吗(网络数据的安全重要吗知乎)

网络信息安全就是指网络系统的硬件。软件以及系统中的数据信息得到保护。不会受到不经意或...

一台云服务器可以绑定多少个IP呢

一个云服务器。理论上是可以绑定无限个IP的。但是实际操作的时候就不是那么回事了。一[...

云服务器购买使用卡顿的原因有哪些(云服务器购买使用卡顿的原因有哪些呢)

云服务器购买使用卡顿的原因有:1。本地网络出现故障;2。本地与云服务器之间的网络线路...

美国服务器迁移时需要进行哪些测试(美国服务器迁移时需要进行哪些测试工作)

美国服务器迁移时需要进行的测试有:1。功能测试。包括软件服务SaaS和美国服务器的管...

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注