在本地主机上使用反向代理发布多个 Web 服务器,保留原始客户端 IP 和主机名

在本地主机上使用反向代理发布多个 Web 服务器,保留原始客户端 IP 和主机名

我一直使用 Windows Server 2003 上的 ISA 发布托管在同一台计算机上的多个 Web 服务器。设置如下:

  • ISA HTTP/S 侦听器绑定到 127.0.0.1 + 外部 IP
  • IIS 绑定到 127.0.0.2
  • Apache 绑定到 127.0.0.3
  • Python Web 应用程序绑定到 127.0.0.4
  • 绑定到 127.0.0.x 的自定义应用程序

我可以通过设置 ISA 中的发布规则,根据主机名将请求路由到特定服务器。ISA 允许我保留原始客户端 IP 和请求的主机名,并且还有很多其他功能,例如请求验证、URL 映射和重写以及缓存。

现在我在使用 Windows Server 2008 R2,ISA 在这里不起作用,TMG 是一个巨大的 PITA(甚至根本不适用于我的 IP 设置 - 默认 gw 1​​0.255.255.1,子网掩码 255.255.255.255),并且 ISA 在 RPC 和其他内部网络流量方面通常被证明是困难的。所以我正在寻找一种方法来做同样的事情,特别是在保留原始客户端 IP 方面。我尝试了 Faststream IQ Proxy,它看起来很有希望,特别是因为它安装了自己的 NDIS 驱动程序,并且服务器发布工作正常,但客户端 IP 总是丢失。Delegate 和 Squid 可能是候选者。但它们没有安装任何网络层驱动程序,因此它们似乎不可能保留发起者的 IP。

我目前在外部 IP 和 127.0.0.1 上运行 IIS,并使用 ARP 和反向代理来发布其他服务器,但效果不太好,代理服务器的客户端 IP 仍然丢失。说实话,这很糟糕,我真的很遗憾 IIS 7.5 仍然没有像几年前的 ISA 那样包含可行的反向代理解决方案。

有谁知道有一款软件可以实现与 ISA 相同的 Web 服务器发布效果,最好是带有不错的 GUI(不过我也可以使用配置文件),可以将代理请求反向发送到本地 Web 服务器,而不会丢失主机名信息和原始客户端 IP?还是说我注定要让 TMG 在我的设置中工作?

答案1

您可能不需要在实际的 TCP 标头中保留原始 IP。许多反向代理设置将允许将发出请求的原始 IP 地址作为 HTTP 标头传递。(例如,请参阅:Squid 配置指令 forwarded_for

带有 mod_proxy 的 Apache也可以达到目的,并且还会为反向代理流量添加 X-Forwarded-For 标头。由于您的计算机上已经运行了 Apache,因此这可能很方便。

答案2

仅供参考,可以使用一些技巧来安装 TMG:

  1. 安装 Microsoft Loopback 适配器 (hdwwiz)

  2. 为环回适配器设置私有 IP 范围内的静态地址(例如 10.0.0.1/255.0.0.0,无默认网关),并在适配器的 TCP/IP 设置中禁用 DNS 注册

  3. 安装 TMG

  4. 将 TMG 升级到 SP1 或使用引导安装

  5. 可选:升级到 DC/RODC

  6. 可选:如果服务器是 DNS,请将“真实”适配器添加为 HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\PublishAddresses,这样私有地址就不会被发布

  7. 使用 netsh http iplisten 将 IIS 绑定到 127.0.0.1 和 10.0.0.1

  8. 使用 TMG 中的服务器发布规则发布 10.0.0.1

  9. 在环回适配器上注册其他地址并将您的应用程序绑定到这些地址(10.0.0.2、10.0.0.3 等),以便您也可以在 TMG 中发布它们

不如 ISA 中那么流畅,但可以工作。在升级到 DC 之前,请务必安装 TMG,因为 Microsoft 不支持在 DC 上安装 TMG

相关内容