通过反向代理进行 IIS IP 记录(Cloudflare)

通过反向代理进行 IIS IP 记录(Cloudflare)

我在 nice 后面使用了 IIS 服务器Cloudflare“反向代理。

这个反向代理服务器向我的服务器公开一个 HTTP 标头,即HTTP_CF_CONNECTING_IP。它包含连接到 Cloudflare 的 IP,因此我实际上可以看到谁在连接。

现在我当然想记录这些 IP。Cloudflare 有一个小web.config脚本,它使用 IIS REWRITE 选项来更改REMOTE_ADDR服务器变量。

        <rules>
            <clear />
            <rule name="Replace REMOTE_ADDR with CF_CONNECTING_IP" enabled="true">
                <match url="(.*)" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                    <add input="{HTTP_CF_CONNECTING_IP}" pattern="\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b" />
                </conditions>
                <serverVariables>
                    <set name="REMOTE_ADDR" value="{HTTP_CF_Connecting_IP}" />
                </serverVariables>
                <action type="None" />
            </rule>
        </rules>

这实际上会影响日志记录吗?另外:这会影响我在运行 ASP.NET 应用程序或 PHP 脚本等时查看请求 IP 时获得的结果吗?

如果确实如此,为什么会出现这种情况:http://devcentral.f5.com/weblogs/Joe/archive/2009/12/23/x-forwarded-for-http-module-for-iis7-source-included.aspx

当我们只能使用 IIS 重写时,这会给我带来什么好处?

答案1

是的,Cloudflare 的这个 web.config“脚本”确实会影响日志记录,因为它会捕获连接到代理的客户端(连接)用户的 IP 地址,并通过服务器变量 REMOTE_ADDR 将其传送到目标服务器。否则,您会看到代理服务器的 IP 地址作为请求 IP 地址。

我认为这适用于 ASP.NET 应用程序,但不适用于 PHP 应用程序。对于这些应用程序,我认为您需要类似以下内容:

http://drupal.org/project/cloudflare (尽管我意识到这是 Drupal 特有的,但它基本上是您列出的 ASP.NET 方式的 PHP 版本)

F5 解决方案存在的原因是为了在代理服务器端处理此问题。此处列出的 ASP.NET 解决方案和针对 Drupal 列出的 PHP 解决方案似乎都在利用 CloudFlare 转发的值 (HTTP_CF_Connecting_IP),并打算在目标服务器上使用。

我意识到您问这个问题已经有一段时间了,但我想即使您已经找到答案/解决方案,这个答案也可能会帮助其他人。

相关内容