代码之家  ›  专栏  ›  技术社区  ›  tylerl

在apache中将REMOTE_ADDR设置为X-Forwarded-For

  •  11
  • tylerl  · 技术社区  · 16 年前

    REMOTE_ADDR 获取代理而不是客户端的地址。

    但是,代理将设置一个名为 X-Forwarded-For

    问题是,我们如何让Apache取代它 标头,以便所有web应用程序都能透明地看到正确的地址?

    7 回复  |  直到 16 年前
        1
  •  14
  •   maciekb    16 年前
        2
  •  8
  •   Ben Last    14 年前

    请注意,X-Forwarded-For标头可能包含 如果请求已通过多个代理,则为IP地址的。在这种情况下,您通常需要最左边的IP。您可以使用SetEnvIf提取此内容:

    SetEnvIf X-Forwarded-For "^(\d{1,3}+\.\d{1,3}+\.\d{1,3}+\.\d{1,3}+).*" XFFCLIENTIP=$1
    

    注意使用 将XFFCLIENTIP环境变量设置为保存正则表达式中第一个组的内容(在括号中)。

    然后,您可以使用环境变量的值来设置头(或者在Apache日志格式中使用它,以便日志包含实际的客户端IP)。

        3
  •  7
  •   Kirrus    7 年前

        4
  •  4
  •   tylerl    14 年前

    除了 mod_rpaf 如前所述,似乎 mod_extract_forwarded

    一个优势 mod_extract_forwarded 是不是可以从 EPEL mod_rpaf 事实并非如此。

    这两个模块似乎都不允许您将整个代理服务器子网列入白名单,这就是为什么CloudFlare人员创建了自己的插件: mod_cloudflare 像其他两个一样的通用工具;它包含CloudFlare子网的硬编码列表。

        5
  •  3
  •   Nathan J.B. Dogbert    10 年前

    是的,我们能做到。

    auto_prepend_file = "c:/prepend.php" 并在此文件中添加以下内容:

    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    

    RemoteIPHeader X-Real-IP .

    干杯

    吉雷马克

        6
  •  2
  •   Marten Lehmann    13 年前

    在撰写本文时,freshport.org、people.apache.org或gist.github.com上的backport和fork都不起作用。它们都基于ApacheHTTPD2.3的早期alpha版本,该版本既不兼容当前的2.2版本,也不兼容当前的2.4版本。

    因此,在花了几个小时的时间试图调整后端口以为httpd2.2创建一个真正有效的后端口后,我决定转向httpd2.4。在httpd2.4中,mod_remoteip工作顺利,即使负载平衡器具有永久的keepalive连接,它使用该连接将来自不同实际客户端ip地址的请求代理到后端。我不确定其他模块是否可以处理这种情况(在同一连接中更改每个请求的客户端ip地址)。

        7
  •  1
  •   Daniel Miller    15 年前

    请记住,此值可能会被欺骗。看见 http://blog.c22.cc/2011/04/22/surveymonkey-ip-spoofing/ 对于具有跨站点脚本结果的实际示例。

        8
  •  0
  •   freemanpolys    11 年前

    设定 美法西普

        9
  •  0
  •   rustyx    5 年前

    自从 mod_remoteip 执行此操作的内置模块。

    1. 使可能 mod_remoteip
      a2enmod remoteip )

    2. conf/trusted-ranges.txt

    3. 将此行添加到Apache配置中:

      RemoteIPTrustedProxyList conf/trusted-ranges.txt
      
    4. 更改日志文件格式以使用 %a 而不是 %h 用于记录客户端IP。


    您需要信任他们的所有IP范围 CF-Connecting-IP :

    RemoteIPHeader CF-Connecting-IP
    

    curl https://www.cloudflare.com/ips-v4 > trusted-ranges.txt
    curl https://www.cloudflare.com/ips-v6 >> trusted-ranges.txt
    
    推荐文章