ARR 进阶

[========]

ARR 进阶

https://docs.microsoft.com/zh-cn/iis/extensions/url-rewrite-module/url-rewrite-module-configuration-reference

使用请求条件和服务器变量

URL Rewrite 可以借助服务器参数实现对 url 的筛选。
URL 结构: http(s)://<host>:<port>/<path>?<querystring>
可以在 ARR 中使用服务端参数获取 URL 中某部分。
服务端参数说明:

  • HTTP_HOST -> <host>
  • SERVER_PORT -> <port>
  • PATH_INFO -> /<path>
  • QUERY_STRING -> <querystring>
  • REQUEST_URI -> /<path>?<querystring>
  • URL -> http(s)://<host>:<port>/<path>?<querystring>

更多服务器变量参考:
https://docs.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms524602(v=vs.90)

重写指定端口的请求

下面的示例通过配置 URL 重写规则,以达到监听本机80端口负载到本机其他端口的效果。

  1. URL 匹配

  2. 匹配条件,针对80端口号(80默认不包含在url中)

  3. 通过服务器场负载

替换请求 URL

下面的示例替换了请求的 host 和 port。


实现将http://localhost/b/1.html地址转向http://10.99.59.47:8081/b/1.html

使用模板

https://docs.microsoft.com/zh-cn/iis/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#rewrite-maps
可以将符合重写条件的 url 和替换内容使用键值对的方式配置在rewriteMaps,只能进行纯文本的比较,不能使用模式匹配。
如下的web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rewriteMaps>
                <rewriteMap name="StaticRewrites" defaultValue="">
                    <add key="/diagnostics" value="/default.aspx?tabid=2&amp;subtabid=29" />
                    <add key="/webcasts" value="/default.aspx?tabid=2&amp;subtabid=24" />
                    <add key="/php" value="/default.aspx?tabid=7116" />
                </rewriteMap>
            </rewriteMaps>

            <rules>
                <rule name="Rewrite Rule" stopProcessing="true">
                    <match url=".*" />
                    <conditions>
                        <add input="{StaticRewrites:{REQUEST_URI}}" pattern="(.+)" />
                    </conditions>
                    <action type="Redirect" url="http://www.aaa.com{C:1}" redirectType="Found" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

ARR 代理功能

请求由左向右,左边为正向代理,右边为反向代理。

正向代理,它处理来自客户端的出站请求,将其转发到Internet,并将生成的响应返回给客户端。
反向代理,它处理来自Internet的传入请求,将其转发给后端工作程序,然后将响应返回给Internet。

正向代理

ARR 正向代理 不支持 HTTPS(443)消息,因为ARR不支持HTTP CONNECT。
参考:https://docs.microsoft.com/zh-cn/iis/extensions/configuring-application-request-routing-arr/creating-a-forward-proxy-using-application-request-routing

反向代理

path 中包含 61 的 URL 会被转发到其他服务器

  1. 开启 ARR 代理


  2. 配置 URL 重写规则

上面的 URL 重写规则对应配置文件(web.config)格式:

<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxy61" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://10.29.80.9:8010/{R:1}" />
                    <conditions>
                        <add input="{PATH_INFO}" pattern=".*/(61)/?.*" />
                    </conditions>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

使用缓存

内存缓存

默认情况下 ServerFarm 中启用了内存缓存,


发生请求时,如果代理机没有缓存内容,则将请求转发到实际服务器,可以看到下图实际只有两次请求转发到了实际服务器,

可以通过命令netsh http show cache查看缓存状态:

注意缓存生存时间请求队列名称

磁盘缓存

使用磁盘缓存,可以针对静态文件在代理服务器进行缓存,已有缓存不需要转发请求到实际服务器。

  1. 选择服务器节点下的 Application Request Routing Cache
  2. 选择右侧增加驱动设备
  3. 设置一个本地磁盘路径

  4. 管理缓存配置,分片、压缩、缓存时间等

  5. ServerFarm 中启用磁盘缓存
  6. 发送请求后可以看到磁盘保存了缓存文件
  7. 监控中可以看到命中了磁盘缓存,不会请求去到原始服务器

注意请求顺序是:

  1. 代理机内存缓存
  2. 磁盘缓存
  3. 原始服务器

请求合并功能 enable request consolidation

为解决当缓存节点上发生级联的缓存缺失并且所有请求都转发到原始服务器时,如何保护原始服务器的问题。

参考:https://docs.microsoft.com/en-us/iis/extensions/configuring-application-request-routing-arr/configure-request-consolidation-feature-in-application-request-routing

缓存阵列


https://docs.microsoft.com/zh-cn/iis/extensions/configuring-application-request-routing-arr/cache-hierarchy-management-using-application-request-routing

ARR 的高可用和水平扩展

结合 NLB 和 外部缓存,配置多台 ARR 服务器,用以实现高可用和水平扩展
https://docs.microsoft.com/zh-cn/iis/extensions/configuring-application-request-routing-arr/achieving-high-availability-and-scalability-arr-and-nlb

posted @ 2020-02-26 11:06  JervisCui  阅读(840)  评论(0编辑  收藏  举报