# IIS ARR 反向代理：把 Node、Java、Python 放到 IIS 后面

> 安装 ARR 与 URL Rewrite，开启代理，创建服务器场，保留 Host/X-Forwarded 头，并避免把 IIS 变成开放代理。

**测试环境**

- 版本号: 26100.33650
- 版本: Standard / Datacenter
- 架构: x64
- 证据: E1
- 核验日期: 2026-10-29

## 一句话结论

ARR（Application Request Routing）把 IIS 变成**反向代理**：把请求转给上游服务器/服务器场，再把响应带回来。

适用：

- IIS 终止 TLS，Node/Java/Python 监听 `127.0.0.1:3000`；
- 一个域名后面有多台应用服务器；
- 想在 Kestrel/Tomcat 前面用 IIS 的日志/压缩/健康检查。

不要只用 URL Rewrite：重写改变 IIS 服务的 URL；ARR 才转发到另一台服务器。

## 安装

ARR 依赖 URL Rewrite。安装两个 x64 模块后：

```powershell
Get-WebGlobalModule -Name ApplicationRequestRouting
Get-WebGlobalModule -Name RewriteModule
```

IIS 管理器 → 服务器 → **Application Request Routing Cache** → **Server Proxy Settings** → 启用代理。不开这个，农场规则会 404/502。

## 服务器场

1. **Server Farms → Create Server Farm**。
2. 加 `127.0.0.1:3000`（或应用服务器）。
3. 健康测试：一个不需要认证、返回 200 的路径。
4. 代理设置：保留 Host，转发 `X-Forwarded-For`/`X-Forwarded-Proto`。
5. 建 URL Rewrite 规则，把站点路由到农场。

最小规则形态：

```xml
<rule name="Proxy to app" stopProcessing="true">
  <match url="(.*)" />
  <action type="Rewrite" url="http://appfarm/{R:1}" />
</rule>
```

action 里的农场名必须和 ARR 农场一致，不是随便一个主机名。

## 头与重定向

- 保留 `Host`，应用才能生成正确的绝对 URL。
- 转发 `X-Forwarded-Proto`，应用才知道客户端用的是 HTTPS。
- 应用跳到 `http://` 或内部主机名时，修应用的 trusted proxy 设置；不要全局关 HTTPS 跳转。
- WebSocket 需要 ARR/URL Rewrite 支持和匹配的超时。

> **危险: 不要做开放代理**
>
> 把任意目标 URL 交给 ARR 规则，就是 SSRF/开放代理风险。只代理已知上游，站点限制在管理网，不要让用户输入决定目标 URL。

## 验证

```powershell
curl.exe -I https://lab.example/
curl.exe -H "Host: lab.example" http://127.0.0.1/
Get-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' `
  -Filter 'system.webServer/rewrite/rules' -Name '.'
```

检查：

- 响应来自上游（应用头/内容）；
- `X-Forwarded-For` 到应用；
- 重定向用公网主机名；
- 上游挂了返回受控 502/503，不是一直挂起。

## 什么时候不用 ARR

- 静态站：IIS 本身够。
- Windows 边缘要 HTTP/3：ARR/IIS 的 HTTP/3 支持看版本，必须实测，不能假设。
- 大规模反向代理：Linux Nginx/HAProxy 往往更合适。ARR 是 Windows 上方便，不是万能负载均衡。

## 实验室边界

本页 E1。实验室装了 IIS 和 PHP，但没装 ARR；没有复现上游农场或头测试。Server 2025 上装通再升级 E2。

## 来源

- [Microsoft Learn — URL Rewrite + ARR 反向代理](https://learn.microsoft.com/zh-cn/iis/extensions/url-rewrite-module/reverse-proxy-with-url-rewrite-v2-and-application-request-routing)

---

来源页面: https://winbook.fyi/zh/server/web/iis-arr/
