You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在IIS上实现类似Azure Application Gateway的代理方案

IIS 透明代理(类Azure Application Gateway能力)实现方案

你需要实现的是无篡改透传代理,区别于常规会改写响应、丢失请求体、仅支持GET的反向代理,全程保留原始请求结构、POST请求体、对外统一展示代理侧URL/IP,和Azure Application Gateway的转发逻辑一致,可通过IIS原生组件组合实现,无需额外第三方工具。

前置组件安装

先在IIS服务器上安装两个官方原生模块:

  • URL Rewrite 模块
  • Application Request Routing(ARR)模块
    安装完成后进入IIS管理器的服务器级ARR配置页,开启代理功能,同时取消勾选「反向代理重写响应主机头」「重写响应内链接地址」两个默认选项,关闭ARR自带的自动改写逻辑,避免响应内容被篡改。

核心规则配置

所有配置在对外提供代理服务的站点下生效,不要做全局配置避免影响其他站点,直接修改站点根目录下的web.config文件即可,配置内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="FullTransparentProxy" stopProcessing="true">
          <!-- 匹配所有请求路径 -->
          <match url="(.*)" />
          <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
            <!-- 按需排除IIS本地默认路径,可自行增减 -->
            <add input="{PATH_INFO}" pattern="^/iisstart\.htm$" negate="true" />
          </conditions>
          <serverVariables>
            <!-- 透传原始Host头,不替换为后端服务地址 -->
            <set name="HTTP_HOST" value="{HTTP_HOST}" />
            <!-- 透传原始客户端IP,不需要可删除 -->
            <set name="HTTP_X_FORWARDED_FOR" value="{REMOTE_ADDR}" />
          </serverVariables>
          <!-- 转发到目标后端服务,保留完整路径和查询参数 -->
          <action type="Rewrite" url="http://替换为你的目标服务地址/{R:1}" appendQueryString="true" logRewrittenUrl="false" />
        </rule>
      </rules>
    </rewrite>
    <!-- 放行所有HTTP方法,放开请求体大小限制 -->
    <security>
      <requestFiltering>
        <verbs allowUnlisted="true">
          <add verb="GET" allowed="true" />
          <add verb="POST" allowed="true" />
          <add verb="PUT" allowed="true" />
          <add verb="DELETE" allowed="true" />
          <add verb="PATCH" allowed="true" />
          <add verb="OPTIONS" allowed="true" />
          <add verb="HEAD" allowed="true" />
        </verbs>
        <!-- 按需调整最大请求体大小,单位为字节,当前配置为4GB -->
        <requestLimits maxAllowedContentLength="4294967295" />
      </requestFiltering>
    </security>
    <!-- 关闭IIS默认请求验证,避免POST请求体被拦截、改写 -->
    <httpRuntime requestValidationMode="2.0" maxRequestLength="2147483647" />
  </system.webServer>
</configuration>

必做的校验调整

  1. 回到ARR全局代理设置页,关闭「请求缓冲」「响应缓冲」选项,设置缓冲区大小为0,让请求、响应直接透传,不做IIS侧的缓存解析,避免大文件、二进制POST请求体被篡改。
  2. 确认ARR设置里的「保留原始客户端证书」「透传所有请求头」选项处于开启状态,不要过滤任何自定义请求头。
  3. 验证标准:
    • 发送任意格式POST请求(JSON、表单、二进制流),后端收到的请求体和原始发送内容完全一致,无字段丢失、编码修改问题
    • 所有响应内容、响应头中仅出现IIS代理的对外域名/IP,不会泄露后端目标服务地址
    • 所有HTTP方法(PUT/DELETE/PATCH等)均可正常转发,不会返回405方法不允许错误
    • 客户端抓包确认所有连接的对端IP均为IIS服务器地址,不会直接和后端目标服务建立连接

该配置和常规反向代理的核心差异:关闭了所有IIS默认的自动改写逻辑,不对请求、响应做任何内容层面的修改,仅做流量转发,完全匹配你提到的Azure Application Gateway的无篡改转发能力。

内容的提问来源于stack exchange,提问作者Marco Slanzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:24:21