我在 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),并打算在目标服务器上使用。
我意识到您问这个问题已经有一段时间了,但我想即使您已经找到答案/解决方案,这个答案也可能会帮助其他人。